File: contextuallyTypedByDiscriminableUnion.types

package info (click to toggle)
node-typescript 5.0.4%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 459,140 kB
  • sloc: javascript: 1,972,754; makefile: 6; sh: 1
file content (69 lines) | stat: -rw-r--r-- 1,410 bytes parent folder | download | duplicates (3)
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
    }
});