// @target: es2015
// Typical case
class C1 {
    property1!: string;
}

declare let var1: C1 | number;
if (var1.constructor == C1) {
    var1; // C1
    var1.property1; // string
}
else {
    var1; // number | C1
}
if (var1["constructor"] == C1) {
    var1; // C1
    var1.property1; // string
}
else {
    var1; // number | C1
}
if (var1.constructor === C1) {
    var1; // C1
    var1.property1; // string
}
else {
    var1; // number | C1
}
if (var1["constructor"] === C1) {
    var1; // C1
    var1.property1; // string
}
else {
    var1; // number | C1
}
if (C1 == var1.constructor) {
    var1; // C1
    var1.property1; // string
}
else {
    var1; // number | C1
}
if (C1 == var1["constructor"]) {
    var1; // C1
    var1.property1; // string
}
else {
    var1; // number | C1
}
if (C1 === var1.constructor) {
    var1; // C1
    var1.property1; // string
}
else {
    var1; // number | C1
}
if (C1 === var1["constructor"]) {
    var1; // C1
    var1.property1; // string
}
else {
    var1; // number | C1
}

if (var1.constructor != C1) {
    var1; // C1 | number
    var1.property1; // error
}
else {
    var1; // C1
}
if (var1["constructor"] != C1) {
    var1; // C1 | number
    var1.property1; // error
}
else {
    var1; // C1
}
if (var1.constructor !== C1) {
    var1; // C1 | number
    var1.property1; // error
}
else {
    var1; // C1
}
if (var1["constructor"] !== C1) {
    var1; // C1 | number
    var1.property1; // error
}
else {
    var1; // C1
}
if (C1 != var1.constructor) {
    var1; // C1 | number
    var1.property1; // error
}
else {
    var1; // C1
}
if (C1 != var1["constructor"]) {
    var1; // C1 | number
    var1.property1; // error
}
else {
    var1; // C1
}
if (C1 !== var1.constructor) {
    var1; // C1 | number
    var1.property1; // error
}
else {
    var1; // C1
}
if (C1 !== var1["constructor"]) {
    var1; // C1 | number
    var1.property1; // error
}
else {
    var1; // C1
}

// Repro from #37660

function foo(instance: Function | object) {
    if (typeof instance === 'function') {
        if (instance.prototype == null || instance.prototype.constructor == null) {
            return instance.length;
        }
    }
}
