@@ -42,3 +42,208 @@ function funcTwo(arg: A | B | undefined) {
42
42
>name : Symbol(name, Decl(controlFlowOptionalChain2.ts, 1, 12))
43
43
}
44
44
45
+ function funcThree(arg: A | B | null) {
46
+ >funcThree : Symbol(funcThree, Decl(controlFlowOptionalChain2.ts, 17, 1))
47
+ >arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 19, 19))
48
+ >A : Symbol(A, Decl(controlFlowOptionalChain2.ts, 0, 0))
49
+ >B : Symbol(B, Decl(controlFlowOptionalChain2.ts, 3, 1))
50
+
51
+ if (arg?.type === 'B') {
52
+ >arg?.type : Symbol(type, Decl(controlFlowOptionalChain2.ts, 0, 10), Decl(controlFlowOptionalChain2.ts, 5, 10))
53
+ >arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 19, 19))
54
+ >type : Symbol(type, Decl(controlFlowOptionalChain2.ts, 0, 10), Decl(controlFlowOptionalChain2.ts, 5, 10))
55
+
56
+ arg; // `B`
57
+ >arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 19, 19))
58
+
59
+ return;
60
+ }
61
+
62
+ arg;
63
+ >arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 19, 19))
64
+
65
+ arg?.name;
66
+ >arg?.name : Symbol(name, Decl(controlFlowOptionalChain2.ts, 1, 12))
67
+ >arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 19, 19))
68
+ >name : Symbol(name, Decl(controlFlowOptionalChain2.ts, 1, 12))
69
+ }
70
+
71
+ type U = { kind: undefined, u: 'u' }
72
+ >U : Symbol(U, Decl(controlFlowOptionalChain2.ts, 27, 1))
73
+ >kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10))
74
+ >u : Symbol(u, Decl(controlFlowOptionalChain2.ts, 29, 27))
75
+
76
+ type N = { kind: null, n: 'n' }
77
+ >N : Symbol(N, Decl(controlFlowOptionalChain2.ts, 29, 36))
78
+ >kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10))
79
+ >n : Symbol(n, Decl(controlFlowOptionalChain2.ts, 30, 22))
80
+
81
+ type X = { kind: 'X', x: 'x' }
82
+ >X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
83
+ >kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 31, 10))
84
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 31, 21))
85
+
86
+ function f1(x: X | U | undefined) {
87
+ >f1 : Symbol(f1, Decl(controlFlowOptionalChain2.ts, 31, 30))
88
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 33, 12))
89
+ >X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
90
+ >U : Symbol(U, Decl(controlFlowOptionalChain2.ts, 27, 1))
91
+
92
+ if (x?.kind === undefined) {
93
+ >x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
94
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 33, 12))
95
+ >kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
96
+ >undefined : Symbol(undefined)
97
+
98
+ x; // U | undefined
99
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 33, 12))
100
+ }
101
+ else {
102
+ x; // X
103
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 33, 12))
104
+ }
105
+ }
106
+
107
+ function f2(x: X | N | undefined) {
108
+ >f2 : Symbol(f2, Decl(controlFlowOptionalChain2.ts, 40, 1))
109
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 42, 12))
110
+ >X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
111
+ >N : Symbol(N, Decl(controlFlowOptionalChain2.ts, 29, 36))
112
+
113
+ if (x?.kind === undefined) {
114
+ >x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
115
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 42, 12))
116
+ >kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
117
+ >undefined : Symbol(undefined)
118
+
119
+ x; // undefined
120
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 42, 12))
121
+ }
122
+ else {
123
+ x; // X | N
124
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 42, 12))
125
+ }
126
+ }
127
+
128
+ function f3(x: X | U | null) {
129
+ >f3 : Symbol(f3, Decl(controlFlowOptionalChain2.ts, 49, 1))
130
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 51, 12))
131
+ >X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
132
+ >U : Symbol(U, Decl(controlFlowOptionalChain2.ts, 27, 1))
133
+
134
+ if (x?.kind === undefined) {
135
+ >x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
136
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 51, 12))
137
+ >kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
138
+ >undefined : Symbol(undefined)
139
+
140
+ x; // U | null
141
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 51, 12))
142
+ }
143
+ else {
144
+ x; // X
145
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 51, 12))
146
+ }
147
+ }
148
+
149
+ function f4(x: X | N | null) {
150
+ >f4 : Symbol(f4, Decl(controlFlowOptionalChain2.ts, 58, 1))
151
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 60, 12))
152
+ >X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
153
+ >N : Symbol(N, Decl(controlFlowOptionalChain2.ts, 29, 36))
154
+
155
+ if (x?.kind === undefined) {
156
+ >x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
157
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 60, 12))
158
+ >kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
159
+ >undefined : Symbol(undefined)
160
+
161
+ x; // null
162
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 60, 12))
163
+ }
164
+ else {
165
+ x; // X | N
166
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 60, 12))
167
+ }
168
+ }
169
+
170
+ function f5(x: X | U | undefined) {
171
+ >f5 : Symbol(f5, Decl(controlFlowOptionalChain2.ts, 67, 1))
172
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 69, 12))
173
+ >X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
174
+ >U : Symbol(U, Decl(controlFlowOptionalChain2.ts, 27, 1))
175
+
176
+ if (x?.kind === null) {
177
+ >x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
178
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 69, 12))
179
+ >kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
180
+
181
+ x; // never
182
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 69, 12))
183
+ }
184
+ else {
185
+ x; // X | U | undefined
186
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 69, 12))
187
+ }
188
+ }
189
+
190
+ function f6(x: X | N | undefined) {
191
+ >f6 : Symbol(f6, Decl(controlFlowOptionalChain2.ts, 76, 1))
192
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 78, 12))
193
+ >X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
194
+ >N : Symbol(N, Decl(controlFlowOptionalChain2.ts, 29, 36))
195
+
196
+ if (x?.kind === null) {
197
+ >x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
198
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 78, 12))
199
+ >kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
200
+
201
+ x; // N
202
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 78, 12))
203
+ }
204
+ else {
205
+ x; // X | undefined
206
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 78, 12))
207
+ }
208
+ }
209
+
210
+ function f7(x: X | U | null) {
211
+ >f7 : Symbol(f7, Decl(controlFlowOptionalChain2.ts, 85, 1))
212
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 87, 12))
213
+ >X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
214
+ >U : Symbol(U, Decl(controlFlowOptionalChain2.ts, 27, 1))
215
+
216
+ if (x?.kind === null) {
217
+ >x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
218
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 87, 12))
219
+ >kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
220
+
221
+ x; // never
222
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 87, 12))
223
+ }
224
+ else {
225
+ x; // X | U | null
226
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 87, 12))
227
+ }
228
+ }
229
+
230
+ function f8(x: X | N | null) {
231
+ >f8 : Symbol(f8, Decl(controlFlowOptionalChain2.ts, 94, 1))
232
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 96, 12))
233
+ >X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
234
+ >N : Symbol(N, Decl(controlFlowOptionalChain2.ts, 29, 36))
235
+
236
+ if (x?.kind === null) {
237
+ >x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
238
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 96, 12))
239
+ >kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
240
+
241
+ x; // N
242
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 96, 12))
243
+ }
244
+ else {
245
+ x; // X | null
246
+ >x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 96, 12))
247
+ }
248
+ }
249
+
0 commit comments