@@ -23,74 +23,97 @@ type DiscriminatorFalse = {
23
23
>x : Symbol(x, Decl(discriminantPropertyInference.ts, 9, 9))
24
24
}
25
25
26
- type Props = DiscriminatorTrue | DiscriminatorFalse;
27
- >Props : Symbol(Props, Decl(discriminantPropertyInference.ts, 10, 1))
28
- >DiscriminatorTrue : Symbol(DiscriminatorTrue, Decl(discriminantPropertyInference.ts, 0, 0))
29
- >DiscriminatorFalse : Symbol(DiscriminatorFalse, Decl(discriminantPropertyInference.ts, 5, 1))
26
+ type Unrelated = {
27
+ >Unrelated : Symbol(Unrelated, Decl(discriminantPropertyInference.ts, 10, 1))
28
+
29
+ val: number;
30
+ >val : Symbol(val, Decl(discriminantPropertyInference.ts, 12, 18))
31
+ }
30
32
31
33
declare function f(options: DiscriminatorTrue | DiscriminatorFalse): any;
32
- >f : Symbol(f, Decl(discriminantPropertyInference.ts, 12, 52 ))
33
- >options : Symbol(options, Decl(discriminantPropertyInference.ts, 14 , 19))
34
+ >f : Symbol(f, Decl(discriminantPropertyInference.ts, 14, 1 ))
35
+ >options : Symbol(options, Decl(discriminantPropertyInference.ts, 16 , 19))
34
36
>DiscriminatorTrue : Symbol(DiscriminatorTrue, Decl(discriminantPropertyInference.ts, 0, 0))
35
37
>DiscriminatorFalse : Symbol(DiscriminatorFalse, Decl(discriminantPropertyInference.ts, 5, 1))
36
38
37
39
// simple inference
38
40
f({
39
- >f : Symbol(f, Decl(discriminantPropertyInference.ts, 12, 52 ))
41
+ >f : Symbol(f, Decl(discriminantPropertyInference.ts, 14, 1 ))
40
42
41
43
disc: true,
42
- >disc : Symbol(disc, Decl(discriminantPropertyInference.ts, 17 , 3))
44
+ >disc : Symbol(disc, Decl(discriminantPropertyInference.ts, 19 , 3))
43
45
44
46
cb: s => parseInt(s)
45
- >cb : Symbol(cb, Decl(discriminantPropertyInference.ts, 18 , 15))
46
- >s : Symbol(s, Decl(discriminantPropertyInference.ts, 19 , 7))
47
+ >cb : Symbol(cb, Decl(discriminantPropertyInference.ts, 20 , 15))
48
+ >s : Symbol(s, Decl(discriminantPropertyInference.ts, 21 , 7))
47
49
>parseInt : Symbol(parseInt, Decl(lib.es5.d.ts, --, --))
48
- >s : Symbol(s, Decl(discriminantPropertyInference.ts, 19 , 7))
50
+ >s : Symbol(s, Decl(discriminantPropertyInference.ts, 21 , 7))
49
51
50
52
});
51
53
52
54
// simple inference
53
55
f({
54
- >f : Symbol(f, Decl(discriminantPropertyInference.ts, 12, 52 ))
56
+ >f : Symbol(f, Decl(discriminantPropertyInference.ts, 14, 1 ))
55
57
56
58
disc: false,
57
- >disc : Symbol(disc, Decl(discriminantPropertyInference.ts, 23 , 3))
59
+ >disc : Symbol(disc, Decl(discriminantPropertyInference.ts, 25 , 3))
58
60
59
61
cb: n => n.toFixed()
60
- >cb : Symbol(cb, Decl(discriminantPropertyInference.ts, 24 , 16))
61
- >n : Symbol(n, Decl(discriminantPropertyInference.ts, 25 , 7))
62
+ >cb : Symbol(cb, Decl(discriminantPropertyInference.ts, 26 , 16))
63
+ >n : Symbol(n, Decl(discriminantPropertyInference.ts, 27 , 7))
62
64
>n.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
63
- >n : Symbol(n, Decl(discriminantPropertyInference.ts, 25 , 7))
65
+ >n : Symbol(n, Decl(discriminantPropertyInference.ts, 27 , 7))
64
66
>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
65
67
66
68
});
67
69
68
70
// simple inference when strict-null-checks are enabled
69
71
f({
70
- >f : Symbol(f, Decl(discriminantPropertyInference.ts, 12, 52 ))
72
+ >f : Symbol(f, Decl(discriminantPropertyInference.ts, 14, 1 ))
71
73
72
74
disc: undefined,
73
- >disc : Symbol(disc, Decl(discriminantPropertyInference.ts, 29 , 3))
75
+ >disc : Symbol(disc, Decl(discriminantPropertyInference.ts, 31 , 3))
74
76
>undefined : Symbol(undefined)
75
77
76
78
cb: n => n.toFixed()
77
- >cb : Symbol(cb, Decl(discriminantPropertyInference.ts, 30 , 20))
78
- >n : Symbol(n, Decl(discriminantPropertyInference.ts, 31 , 7))
79
+ >cb : Symbol(cb, Decl(discriminantPropertyInference.ts, 32 , 20))
80
+ >n : Symbol(n, Decl(discriminantPropertyInference.ts, 33 , 7))
79
81
>n.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
80
- >n : Symbol(n, Decl(discriminantPropertyInference.ts, 31 , 7))
82
+ >n : Symbol(n, Decl(discriminantPropertyInference.ts, 33 , 7))
81
83
>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
82
84
83
85
});
84
86
85
87
// requires checking type information since discriminator is missing from object
86
88
f({
87
- >f : Symbol(f, Decl(discriminantPropertyInference.ts, 12, 52))
89
+ >f : Symbol(f, Decl(discriminantPropertyInference.ts, 14, 1))
90
+
91
+ cb: n => n.toFixed()
92
+ >cb : Symbol(cb, Decl(discriminantPropertyInference.ts, 37, 3))
93
+ >n : Symbol(n, Decl(discriminantPropertyInference.ts, 38, 7))
94
+ >n.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
95
+ >n : Symbol(n, Decl(discriminantPropertyInference.ts, 38, 7))
96
+ >toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
97
+
98
+ });
99
+
100
+
101
+ declare function g(options: DiscriminatorTrue | DiscriminatorFalse | Unrelated): any;
102
+ >g : Symbol(g, Decl(discriminantPropertyInference.ts, 39, 3))
103
+ >options : Symbol(options, Decl(discriminantPropertyInference.ts, 42, 19))
104
+ >DiscriminatorTrue : Symbol(DiscriminatorTrue, Decl(discriminantPropertyInference.ts, 0, 0))
105
+ >DiscriminatorFalse : Symbol(DiscriminatorFalse, Decl(discriminantPropertyInference.ts, 5, 1))
106
+ >Unrelated : Symbol(Unrelated, Decl(discriminantPropertyInference.ts, 10, 1))
107
+
108
+ // requires checking properties of all types, rather than properties of just the union type (e.g. only intersection)
109
+ g({
110
+ >g : Symbol(g, Decl(discriminantPropertyInference.ts, 39, 3))
88
111
89
112
cb: n => n.toFixed()
90
- >cb : Symbol(cb, Decl(discriminantPropertyInference.ts, 35 , 3))
91
- >n : Symbol(n, Decl(discriminantPropertyInference.ts, 36 , 7))
113
+ >cb : Symbol(cb, Decl(discriminantPropertyInference.ts, 45 , 3))
114
+ >n : Symbol(n, Decl(discriminantPropertyInference.ts, 46 , 7))
92
115
>n.toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
93
- >n : Symbol(n, Decl(discriminantPropertyInference.ts, 36 , 7))
116
+ >n : Symbol(n, Decl(discriminantPropertyInference.ts, 46 , 7))
94
117
>toFixed : Symbol(Number.toFixed, Decl(lib.es5.d.ts, --, --))
95
118
96
119
});
0 commit comments