|
| 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 | +function bar(target: any, Promise: any) { |
| 80 | +>bar : Symbol(bar, Decl(narrowByInstanceof.ts, 32, 1)) |
| 81 | +>target : Symbol(target, Decl(narrowByInstanceof.ts, 34, 13)) |
| 82 | +>Promise : Symbol(Promise, Decl(narrowByInstanceof.ts, 34, 25)) |
| 83 | + |
| 84 | + if (target instanceof Promise) { |
| 85 | +>target : Symbol(target, Decl(narrowByInstanceof.ts, 34, 13)) |
| 86 | +>Promise : Symbol(Promise, Decl(narrowByInstanceof.ts, 34, 25)) |
| 87 | + |
| 88 | + target.__then(); |
| 89 | +>target : Symbol(target, Decl(narrowByInstanceof.ts, 34, 13)) |
| 90 | + } |
| 91 | +} |
| 92 | + |
| 93 | +// Repro from #52571 |
| 94 | + |
| 95 | +class PersonMixin extends Function { |
| 96 | +>PersonMixin : Symbol(PersonMixin, Decl(narrowByInstanceof.ts, 38, 1)) |
| 97 | +>Function : Symbol(Function, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) |
| 98 | + |
| 99 | + public check(o: any) { |
| 100 | +>check : Symbol(PersonMixin.check, Decl(narrowByInstanceof.ts, 42, 36)) |
| 101 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 43, 17)) |
| 102 | + |
| 103 | + return typeof o === "object" && o !== null && o instanceof Person; |
| 104 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 43, 17)) |
| 105 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 43, 17)) |
| 106 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 43, 17)) |
| 107 | +>Person : Symbol(Person, Decl(narrowByInstanceof.ts, 48, 30)) |
| 108 | + } |
| 109 | +} |
| 110 | + |
| 111 | +const cls = new PersonMixin(); |
| 112 | +>cls : Symbol(cls, Decl(narrowByInstanceof.ts, 48, 5)) |
| 113 | +>PersonMixin : Symbol(PersonMixin, Decl(narrowByInstanceof.ts, 38, 1)) |
| 114 | + |
| 115 | +class Person { |
| 116 | +>Person : Symbol(Person, Decl(narrowByInstanceof.ts, 48, 30)) |
| 117 | + |
| 118 | + work(): void { console.log("work") } |
| 119 | +>work : Symbol(Person.work, Decl(narrowByInstanceof.ts, 50, 14)) |
| 120 | +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 121 | +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) |
| 122 | +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 123 | + |
| 124 | + sayHi(): void { console.log("Hi") } |
| 125 | +>sayHi : Symbol(Person.sayHi, Decl(narrowByInstanceof.ts, 51, 40)) |
| 126 | +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 127 | +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) |
| 128 | +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 129 | +} |
| 130 | + |
| 131 | +class Car { |
| 132 | +>Car : Symbol(Car, Decl(narrowByInstanceof.ts, 53, 1)) |
| 133 | + |
| 134 | + sayHi(): void { console.log("Wof Wof") } |
| 135 | +>sayHi : Symbol(Car.sayHi, Decl(narrowByInstanceof.ts, 55, 11)) |
| 136 | +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 137 | +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) |
| 138 | +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 139 | +} |
| 140 | + |
| 141 | +function test(o: Person | Car) { |
| 142 | +>test : Symbol(test, Decl(narrowByInstanceof.ts, 57, 1)) |
| 143 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 59, 14)) |
| 144 | +>Person : Symbol(Person, Decl(narrowByInstanceof.ts, 48, 30)) |
| 145 | +>Car : Symbol(Car, Decl(narrowByInstanceof.ts, 53, 1)) |
| 146 | + |
| 147 | + if (o instanceof cls) { |
| 148 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 59, 14)) |
| 149 | +>cls : Symbol(cls, Decl(narrowByInstanceof.ts, 48, 5)) |
| 150 | + |
| 151 | + console.log("Is Person"); |
| 152 | +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 153 | +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) |
| 154 | +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 155 | + |
| 156 | + (o as Person).work() |
| 157 | +>(o as Person).work : Symbol(Person.work, Decl(narrowByInstanceof.ts, 50, 14)) |
| 158 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 59, 14)) |
| 159 | +>Person : Symbol(Person, Decl(narrowByInstanceof.ts, 48, 30)) |
| 160 | +>work : Symbol(Person.work, Decl(narrowByInstanceof.ts, 50, 14)) |
| 161 | + } |
| 162 | + else { |
| 163 | + console.log("Is Car") |
| 164 | +>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 165 | +>console : Symbol(console, Decl(lib.dom.d.ts, --, --)) |
| 166 | +>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) |
| 167 | + |
| 168 | + o.sayHi(); |
| 169 | +>o.sayHi : Symbol(sayHi, Decl(narrowByInstanceof.ts, 51, 40), Decl(narrowByInstanceof.ts, 55, 11)) |
| 170 | +>o : Symbol(o, Decl(narrowByInstanceof.ts, 59, 14)) |
| 171 | +>sayHi : Symbol(sayHi, Decl(narrowByInstanceof.ts, 51, 40), Decl(narrowByInstanceof.ts, 55, 11)) |
| 172 | + } |
| 173 | +} |
| 174 | + |
0 commit comments