|
| 1 | +=== tests/cases/compiler/narrowByInstanceof.ts === |
| 2 | +interface A { a: string } |
| 3 | +>A : Symbol(A, Decl(narrowByInstanceof.ts, 0, 0)) |
| 4 | +>a : Symbol(A.a, Decl(narrowByInstanceof.ts, 0, 13)) |
| 5 | + |
| 6 | +interface B { b: string } |
| 7 | +>B : Symbol(B, Decl(narrowByInstanceof.ts, 0, 25)) |
| 8 | +>b : Symbol(B.b, Decl(narrowByInstanceof.ts, 1, 13)) |
| 9 | + |
| 10 | +interface C { c: string } |
| 11 | +>C : Symbol(C, Decl(narrowByInstanceof.ts, 1, 25)) |
| 12 | +>c : Symbol(C.c, Decl(narrowByInstanceof.ts, 2, 13)) |
| 13 | + |
| 14 | +type AA = { |
| 15 | +>AA : Symbol(AA, Decl(narrowByInstanceof.ts, 2, 25)) |
| 16 | + |
| 17 | + (): void; |
| 18 | + prototype: A; |
| 19 | +>prototype : Symbol(prototype, Decl(narrowByInstanceof.ts, 5, 13)) |
| 20 | +>A : Symbol(A, Decl(narrowByInstanceof.ts, 0, 0)) |
| 21 | +} |
| 22 | + |
| 23 | +type BB = { |
| 24 | +>BB : Symbol(BB, Decl(narrowByInstanceof.ts, 7, 1)) |
| 25 | + |
| 26 | + new(): B; |
| 27 | +>B : Symbol(B, Decl(narrowByInstanceof.ts, 0, 25)) |
| 28 | +} |
| 29 | + |
| 30 | +function foo(x: A | B | C, A: AA, B: BB, AB: AA | BB) { |
| 31 | +>foo : Symbol(foo, Decl(narrowByInstanceof.ts, 11, 1)) |
| 32 | +>x : Symbol(x, Decl(narrowByInstanceof.ts, 13, 13)) |
| 33 | +>A : Symbol(A, Decl(narrowByInstanceof.ts, 0, 0)) |
| 34 | +>B : Symbol(B, Decl(narrowByInstanceof.ts, 0, 25)) |
| 35 | +>C : Symbol(C, Decl(narrowByInstanceof.ts, 1, 25)) |
| 36 | +>A : Symbol(A, Decl(narrowByInstanceof.ts, 13, 26)) |
| 37 | +>AA : Symbol(AA, Decl(narrowByInstanceof.ts, 2, 25)) |
| 38 | +>B : Symbol(B, Decl(narrowByInstanceof.ts, 13, 33)) |
| 39 | +>BB : Symbol(BB, Decl(narrowByInstanceof.ts, 7, 1)) |
| 40 | +>AB : Symbol(AB, Decl(narrowByInstanceof.ts, 13, 40)) |
| 41 | +>AA : Symbol(AA, Decl(narrowByInstanceof.ts, 2, 25)) |
| 42 | +>BB : Symbol(BB, Decl(narrowByInstanceof.ts, 7, 1)) |
| 43 | + |
| 44 | + if (x instanceof A) { |
| 45 | +>x : Symbol(x, Decl(narrowByInstanceof.ts, 13, 13)) |
| 46 | +>A : Symbol(A, Decl(narrowByInstanceof.ts, 13, 26)) |
| 47 | + |
| 48 | + x; // A |
| 49 | +>x : Symbol(x, Decl(narrowByInstanceof.ts, 13, 13)) |
| 50 | + } |
| 51 | + else { |
| 52 | + x; // B | C |
| 53 | +>x : Symbol(x, Decl(narrowByInstanceof.ts, 13, 13)) |
| 54 | + } |
| 55 | + if (x instanceof B) { |
| 56 | +>x : Symbol(x, Decl(narrowByInstanceof.ts, 13, 13)) |
| 57 | +>B : Symbol(B, Decl(narrowByInstanceof.ts, 13, 33)) |
| 58 | + |
| 59 | + x; // B |
| 60 | +>x : Symbol(x, Decl(narrowByInstanceof.ts, 13, 13)) |
| 61 | + } |
| 62 | + else { |
| 63 | + x; // A | C |
| 64 | +>x : Symbol(x, Decl(narrowByInstanceof.ts, 13, 13)) |
| 65 | + } |
| 66 | + if (x instanceof AB) { |
| 67 | +>x : Symbol(x, Decl(narrowByInstanceof.ts, 13, 13)) |
| 68 | +>AB : Symbol(AB, Decl(narrowByInstanceof.ts, 13, 40)) |
| 69 | + |
| 70 | + x; // A | B |
| 71 | +>x : Symbol(x, Decl(narrowByInstanceof.ts, 13, 13)) |
| 72 | + } |
| 73 | + else { |
| 74 | + x; // A | B | C |
| 75 | +>x : Symbol(x, Decl(narrowByInstanceof.ts, 13, 13)) |
| 76 | + } |
| 77 | +} |
| 78 | + |
| 79 | +// Repro from #52571 |
| 80 | + |
| 81 | +class PersonMixin extends Function { |
| 82 | +>PersonMixin : Symbol(PersonMixin, Decl(narrowByInstanceof.ts, 32, 1)) |
| 83 | +>Function : Symbol(Function, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) |
| 84 | + |
| 85 | + public check(o: any) { |
| 86 | +>check : Symbol(PersonMixin.check, Decl(narrowByInstanceof.ts, 36, 36)) |
| 87 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 37, 17)) |
| 88 | + |
| 89 | + return typeof o === "object" && o !== null && o instanceof Person; |
| 90 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 37, 17)) |
| 91 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 37, 17)) |
| 92 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 37, 17)) |
| 93 | +>Person : Symbol(Person, Decl(narrowByInstanceof.ts, 42, 30)) |
| 94 | + } |
| 95 | +} |
| 96 | + |
| 97 | +const cls = new PersonMixin(); |
| 98 | +>cls : Symbol(cls, Decl(narrowByInstanceof.ts, 42, 5)) |
| 99 | +>PersonMixin : Symbol(PersonMixin, Decl(narrowByInstanceof.ts, 32, 1)) |
| 100 | + |
| 101 | +class Person { |
| 102 | +>Person : Symbol(Person, Decl(narrowByInstanceof.ts, 42, 30)) |
| 103 | + |
| 104 | + work(): void { console.log("work") } |
| 105 | +>work : Symbol(Person.work, Decl(narrowByInstanceof.ts, 44, 14)) |
| 106 | +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 107 | +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) |
| 108 | +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 109 | + |
| 110 | + sayHi(): void { console.log("Hi") } |
| 111 | +>sayHi : Symbol(Person.sayHi, Decl(narrowByInstanceof.ts, 45, 40)) |
| 112 | +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 113 | +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) |
| 114 | +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 115 | +} |
| 116 | + |
| 117 | +class Car { |
| 118 | +>Car : Symbol(Car, Decl(narrowByInstanceof.ts, 47, 1)) |
| 119 | + |
| 120 | + sayHi(): void { console.log("Wof Wof") } |
| 121 | +>sayHi : Symbol(Car.sayHi, Decl(narrowByInstanceof.ts, 49, 11)) |
| 122 | +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 123 | +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) |
| 124 | +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 125 | +} |
| 126 | + |
| 127 | +function test(o: Person | Car) { |
| 128 | +>test : Symbol(test, Decl(narrowByInstanceof.ts, 51, 1)) |
| 129 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 53, 14)) |
| 130 | +>Person : Symbol(Person, Decl(narrowByInstanceof.ts, 42, 30)) |
| 131 | +>Car : Symbol(Car, Decl(narrowByInstanceof.ts, 47, 1)) |
| 132 | + |
| 133 | + if (o instanceof cls) { |
| 134 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 53, 14)) |
| 135 | +>cls : Symbol(cls, Decl(narrowByInstanceof.ts, 42, 5)) |
| 136 | + |
| 137 | + console.log("Is Person"); |
| 138 | +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 139 | +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) |
| 140 | +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 141 | + |
| 142 | + (o as Person).work() |
| 143 | +>(o as Person).work : Symbol(Person.work, Decl(narrowByInstanceof.ts, 44, 14)) |
| 144 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 53, 14)) |
| 145 | +>Person : Symbol(Person, Decl(narrowByInstanceof.ts, 42, 30)) |
| 146 | +>work : Symbol(Person.work, Decl(narrowByInstanceof.ts, 44, 14)) |
| 147 | + } |
| 148 | + else { |
| 149 | + console.log("Is Car") |
| 150 | +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 151 | +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) |
| 152 | +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 153 | + |
| 154 | + o.sayHi(); |
| 155 | +>o.sayHi : Symbol(sayHi, Decl(narrowByInstanceof.ts, 45, 40), Decl(narrowByInstanceof.ts, 49, 11)) |
| 156 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 53, 14)) |
| 157 | +>sayHi : Symbol(sayHi, Decl(narrowByInstanceof.ts, 45, 40), Decl(narrowByInstanceof.ts, 49, 11)) |
| 158 | + } |
| 159 | +} |
| 160 | + |
0 commit comments