1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
//// [doesNotNarrowUnionOfConstructorsWithInstanceof.ts]
class A {
length: 1
constructor() {
this.length = 1
}
}
class B {
length: 2
constructor() {
this.length = 2
}
}
function getTypedArray(flag: boolean) {
return flag ? new A() : new B();
}
function getTypedArrayConstructor(flag: boolean) {
return flag ? A : B;
}
const a = getTypedArray(true); // A | B
const b = getTypedArrayConstructor(false); // A constructor | B constructor
if (!(a instanceof b)) {
console.log(a.length); // Used to be property 'length' does not exist on type 'never'.
}
//// [doesNotNarrowUnionOfConstructorsWithInstanceof.js]
var A = /** @class */ (function () {
function A() {
this.length = 1;
}
return A;
}());
var B = /** @class */ (function () {
function B() {
this.length = 2;
}
return B;
}());
function getTypedArray(flag) {
return flag ? new A() : new B();
}
function getTypedArrayConstructor(flag) {
return flag ? A : B;
}
var a = getTypedArray(true); // A | B
var b = getTypedArrayConstructor(false); // A constructor | B constructor
if (!(a instanceof b)) {
console.log(a.length); // Used to be property 'length' does not exist on type 'never'.
}
|