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 54 55 56 57 58 59 60 61 62 63 64 65
|
// Derived class with different structures
class C1 {
property1: number;
}
class C2 extends C1 {
property2: number;
}
let var1: C2 | string;
if (var1.constructor === C1) {
var1; // never
var1.property1; // error
}
if (var1.constructor === C2) {
var1; // C2
var1.property1; // number
}
// Derived classes with the same structure
class C3 {}
class C4 extends C3 {}
let var2: C4 | string;
if (var2.constructor === C3) {
var2; // never
}
if (var2.constructor === C4) {
var2; // C4
}
// Disjointly structured classes
class C5 {
property1: number;
}
class C6 {
property2: number;
}
let let3: C6 | string;
if (let3.constructor === C5) {
let3; // never
}
if (let3.constructor === C6) {
let3; // C6
}
// Classes with the same structure
class C7 {
property1: number
}
class C8 {
property1: number;
}
let let4: C8 | string;
if (let4.constructor === C7) {
let4; // never
}
if (let4.constructor === C8) {
let4; // C8
}
|