File: typeGuardConstructorDerivedClass.ts

package info (click to toggle)
node-typescript 4.9.5%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 533,908 kB
  • sloc: javascript: 2,018,330; makefile: 7; sh: 1
file content (65 lines) | stat: -rw-r--r-- 1,046 bytes parent folder | download | duplicates (4)
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
}