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
|
=== tests/cases/compiler/contextuallyTypedByDiscriminableUnion.ts ===
type ADT = {
>ADT : { kind: "a"; method(x: string): number; } | { kind: "b"; method(x: number): string; }
kind: "a",
>kind : "a"
method(x: string): number;
>method : (x: string) => number
>x : string
} | {
kind: "b",
>kind : "b"
method(x: number): string;
>method : (x: number) => string
>x : number
};
function invoke(item: ADT) {
>invoke : (item: ADT) => void
>item : ADT
if (item.kind === "a") {
>item.kind === "a" : boolean
>item.kind : "a" | "b"
>item : ADT
>kind : "a" | "b"
>"a" : "a"
item.method("");
>item.method("") : number
>item.method : (x: string) => number
>item : { kind: "a"; method(x: string): number; }
>method : (x: string) => number
>"" : ""
}
else {
item.method(42);
>item.method(42) : string
>item.method : (x: number) => string
>item : { kind: "b"; method(x: number): string; }
>method : (x: number) => string
>42 : 42
}
}
invoke({
>invoke({ kind: "a", method(a) { return +a; }}) : void
>invoke : (item: ADT) => void
>{ kind: "a", method(a) { return +a; }} : { kind: "a"; method(a: string): number; }
kind: "a",
>kind : "a"
>"a" : "a"
method(a) {
>method : (a: string) => number
>a : string
return +a;
>+a : number
>a : string
}
});
|