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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
=== tests/cases/compiler/flowControlTypeGuardThenSwitch.ts ===
enum Kind {
>Kind : Kind
A,
>A : Kind.A
B,
>B : Kind.B
}
interface Base {
kind: Kind;
>kind : Kind
}
interface A extends Base {
kind: Kind.A;
>kind : Kind.A
>Kind : any
yar: any;
>yar : any
}
interface B extends Base {
kind: Kind.B;
>kind : Kind.B
>Kind : any
gar: any;
>gar : any
}
type Both = A | B;
>Both : Both
function isBoth(x: Base): x is Both {
>isBoth : (x: Base) => x is Both
>x : Base
return true;
>true : true
}
let foo: Base = undefined;
>foo : Base
>undefined : undefined
if (isBoth(foo)) {
>isBoth(foo) : boolean
>isBoth : (x: Base) => x is Both
>foo : Base
switch (foo.kind) {
>foo.kind : Kind
>foo : Both
>kind : Kind
case Kind.A:
>Kind.A : Kind.A
>Kind : typeof Kind
>A : Kind.A
const myA: A = foo; // Should not be an error
>myA : A
>foo : A
break;
case Kind.B:
>Kind.B : Kind.B
>Kind : typeof Kind
>B : Kind.B
const myB: B = foo;
>myB : B
>foo : B
break;
}
}
|