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 66
|
=== tests/cases/compiler/inKeywordAndIntersection.ts ===
class A { a = 0 }
>A : A
>a : number
>0 : 0
class B { b = 0 }
>B : B
>b : number
>0 : 0
function f10(obj: A & { x: string } | B) {
>f10 : (obj: (A & { x: string;}) | B) => void
>obj : B | (A & { x: string; })
>x : string
if (obj instanceof Object) {
>obj instanceof Object : boolean
>obj : B | (A & { x: string; })
>Object : ObjectConstructor
obj; // A & { x: string } | B
>obj : B | (A & { x: string; })
}
else {
obj; // Error
>obj : never
}
}
// Repro from #50844
interface InstanceOne {
one(): void
>one : () => void
}
interface InstanceTwo {
two(): void
>two : () => void
}
const instance = {} as InstanceOne | InstanceTwo
>instance : InstanceOne | InstanceTwo
>{} as InstanceOne | InstanceTwo : InstanceOne | InstanceTwo
>{} : {}
const ClassOne = {} as { new(): InstanceOne } & { foo: true };
>ClassOne : (new () => InstanceOne) & { foo: true; }
>{} as { new(): InstanceOne } & { foo: true } : (new () => InstanceOne) & { foo: true; }
>{} : {}
>foo : true
>true : true
if (instance instanceof ClassOne) {
>instance instanceof ClassOne : boolean
>instance : InstanceOne | InstanceTwo
>ClassOne : (new () => InstanceOne) & { foo: true; }
instance.one();
>instance.one() : void
>instance.one : () => void
>instance : InstanceOne
>one : () => void
}
|