@@ -152,123 +152,214 @@ function f5(x: string | number, cond: () => boolean) {
152
152
>x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 51, 12))
153
153
}
154
154
155
+ function f5a(cond: boolean) {
156
+ >f5a : Symbol(f5a, Decl(narrowingPastLastAssignment.ts, 61, 1))
157
+ >cond : Symbol(cond, Decl(narrowingPastLastAssignment.ts, 63, 13))
158
+
159
+ if (cond) {
160
+ >cond : Symbol(cond, Decl(narrowingPastLastAssignment.ts, 63, 13))
161
+
162
+ let x: number | undefined;
163
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 65, 11))
164
+
165
+ x = 1;
166
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 65, 11))
167
+
168
+ action(() => { x /* number */ });
169
+ >action : Symbol(action, Decl(narrowingPastLastAssignment.ts, 0, 0))
170
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 65, 11))
171
+ }
172
+ else {
173
+ let x: number | undefined;
174
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 70, 11))
175
+
176
+ x = 2;
177
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 70, 11))
178
+
179
+ action(() => { x /* number */ });
180
+ >action : Symbol(action, Decl(narrowingPastLastAssignment.ts, 0, 0))
181
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 70, 11))
182
+ }
183
+ }
184
+
185
+ function f5b() {
186
+ >f5b : Symbol(f5b, Decl(narrowingPastLastAssignment.ts, 74, 1))
187
+
188
+ for (let x = 0; x < 10; x++) {
189
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 77, 12))
190
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 77, 12))
191
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 77, 12))
192
+
193
+ if (x === 1 || x === 2) {
194
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 77, 12))
195
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 77, 12))
196
+
197
+ action(() => { x /* 1 | 2 */ })
198
+ >action : Symbol(action, Decl(narrowingPastLastAssignment.ts, 0, 0))
199
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 77, 12))
200
+ }
201
+ }
202
+ }
203
+
155
204
// Implicit any variables have a known type following last assignment
156
205
157
206
function f6() {
158
- >f6 : Symbol(f6, Decl(narrowingPastLastAssignment.ts, 61 , 1))
207
+ >f6 : Symbol(f6, Decl(narrowingPastLastAssignment.ts, 82 , 1))
159
208
160
209
let x;
161
- >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 66 , 7))
210
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 87 , 7))
162
211
163
212
x = "abc";
164
- >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 66 , 7))
213
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 87 , 7))
165
214
166
215
action(() => { x }); // Error
167
216
>action : Symbol(action, Decl(narrowingPastLastAssignment.ts, 0, 0))
168
- >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 66 , 7))
217
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 87 , 7))
169
218
170
219
x = 42;
171
- >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 66 , 7))
220
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 87 , 7))
172
221
173
222
action(() => { x /* number */ });
174
223
>action : Symbol(action, Decl(narrowingPastLastAssignment.ts, 0, 0))
175
- >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 66 , 7))
224
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 87 , 7))
176
225
}
177
226
178
227
// Narrowings on catch variables are preserved past last assignment
179
228
180
229
function f7() {
181
- >f7 : Symbol(f7, Decl(narrowingPastLastAssignment.ts, 71 , 1))
230
+ >f7 : Symbol(f7, Decl(narrowingPastLastAssignment.ts, 92 , 1))
182
231
183
232
try {
184
233
}
185
234
catch (e) {
186
- >e : Symbol(e, Decl(narrowingPastLastAssignment.ts, 78 , 11))
235
+ >e : Symbol(e, Decl(narrowingPastLastAssignment.ts, 99 , 11))
187
236
188
237
if (e instanceof Error) {
189
- >e : Symbol(e, Decl(narrowingPastLastAssignment.ts, 78 , 11))
238
+ >e : Symbol(e, Decl(narrowingPastLastAssignment.ts, 99 , 11))
190
239
>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2022.error.d.ts, --, --))
191
240
192
241
let f = () => { e /* Error */ }
193
- >f : Symbol(f, Decl(narrowingPastLastAssignment.ts, 80 , 15))
194
- >e : Symbol(e, Decl(narrowingPastLastAssignment.ts, 78 , 11))
242
+ >f : Symbol(f, Decl(narrowingPastLastAssignment.ts, 101 , 15))
243
+ >e : Symbol(e, Decl(narrowingPastLastAssignment.ts, 99 , 11))
195
244
}
196
245
}
197
246
}
198
247
248
+ // Narrowings are not preserved for global variables
249
+
250
+ let g: string | number;
251
+ >g : Symbol(g, Decl(narrowingPastLastAssignment.ts, 108, 3))
252
+
253
+ g = "abc";
254
+ >g : Symbol(g, Decl(narrowingPastLastAssignment.ts, 108, 3))
255
+
256
+ action(() => { g /* string | number */ });
257
+ >action : Symbol(action, Decl(narrowingPastLastAssignment.ts, 0, 0))
258
+ >g : Symbol(g, Decl(narrowingPastLastAssignment.ts, 108, 3))
259
+
260
+ // Narrowings are not preserved for exported namespace members
261
+
262
+ namespace Foo {
263
+ >Foo : Symbol(Foo, Decl(narrowingPastLastAssignment.ts, 110, 42))
264
+
265
+ export let x: string | number;
266
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 115, 14))
267
+
268
+ x = "abc";
269
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 115, 14))
270
+
271
+ action(() => { x /* string | number */ });
272
+ >action : Symbol(action, Decl(narrowingPastLastAssignment.ts, 0, 0))
273
+ >x : Symbol(x, Decl(narrowingPastLastAssignment.ts, 115, 14))
274
+
275
+ let y: string | number;
276
+ >y : Symbol(y, Decl(narrowingPastLastAssignment.ts, 118, 7))
277
+
278
+ y = "abc";
279
+ >y : Symbol(y, Decl(narrowingPastLastAssignment.ts, 118, 7))
280
+
281
+ action(() => { y /* string */ });
282
+ >action : Symbol(action, Decl(narrowingPastLastAssignment.ts, 0, 0))
283
+ >y : Symbol(y, Decl(narrowingPastLastAssignment.ts, 118, 7))
284
+ }
285
+
199
286
// Repros from #35124
200
287
201
288
function f10() {
202
- >f10 : Symbol(f10, Decl(narrowingPastLastAssignment.ts, 83 , 1))
289
+ >f10 : Symbol(f10, Decl(narrowingPastLastAssignment.ts, 121 , 1))
203
290
204
291
let i: number | undefined;
205
- >i : Symbol(i, Decl(narrowingPastLastAssignment.ts, 88 , 7))
292
+ >i : Symbol(i, Decl(narrowingPastLastAssignment.ts, 126 , 7))
206
293
207
294
i = 0;
208
- >i : Symbol(i, Decl(narrowingPastLastAssignment.ts, 88 , 7))
295
+ >i : Symbol(i, Decl(narrowingPastLastAssignment.ts, 126 , 7))
209
296
210
297
return (k: number) => k === i + 1;
211
- >k : Symbol(k, Decl(narrowingPastLastAssignment.ts, 90 , 12))
212
- >k : Symbol(k, Decl(narrowingPastLastAssignment.ts, 90 , 12))
213
- >i : Symbol(i, Decl(narrowingPastLastAssignment.ts, 88 , 7))
298
+ >k : Symbol(k, Decl(narrowingPastLastAssignment.ts, 128 , 12))
299
+ >k : Symbol(k, Decl(narrowingPastLastAssignment.ts, 128 , 12))
300
+ >i : Symbol(i, Decl(narrowingPastLastAssignment.ts, 126 , 7))
214
301
}
215
302
216
303
function makeAdder(n?: number) {
217
- >makeAdder : Symbol(makeAdder, Decl(narrowingPastLastAssignment.ts, 91 , 1))
218
- >n : Symbol(n, Decl(narrowingPastLastAssignment.ts, 93 , 19))
304
+ >makeAdder : Symbol(makeAdder, Decl(narrowingPastLastAssignment.ts, 129 , 1))
305
+ >n : Symbol(n, Decl(narrowingPastLastAssignment.ts, 131 , 19))
219
306
220
307
n ??= 0;
221
- >n : Symbol(n, Decl(narrowingPastLastAssignment.ts, 93 , 19))
308
+ >n : Symbol(n, Decl(narrowingPastLastAssignment.ts, 131 , 19))
222
309
223
310
return (m: number) => n + m;
224
- >m : Symbol(m, Decl(narrowingPastLastAssignment.ts, 95 , 12))
225
- >n : Symbol(n, Decl(narrowingPastLastAssignment.ts, 93 , 19))
226
- >m : Symbol(m, Decl(narrowingPastLastAssignment.ts, 95 , 12))
311
+ >m : Symbol(m, Decl(narrowingPastLastAssignment.ts, 133 , 12))
312
+ >n : Symbol(n, Decl(narrowingPastLastAssignment.ts, 131 , 19))
313
+ >m : Symbol(m, Decl(narrowingPastLastAssignment.ts, 133 , 12))
227
314
}
228
315
229
316
function f11() {
230
- >f11 : Symbol(f11, Decl(narrowingPastLastAssignment.ts, 96 , 1))
317
+ >f11 : Symbol(f11, Decl(narrowingPastLastAssignment.ts, 134 , 1))
231
318
232
319
let r;
233
- >r : Symbol(r, Decl(narrowingPastLastAssignment.ts, 99 , 7))
320
+ >r : Symbol(r, Decl(narrowingPastLastAssignment.ts, 137 , 7))
234
321
235
322
r = "b";
236
- >r : Symbol(r, Decl(narrowingPastLastAssignment.ts, 99 , 7))
323
+ >r : Symbol(r, Decl(narrowingPastLastAssignment.ts, 137 , 7))
237
324
238
325
() => r;
239
- >r : Symbol(r, Decl(narrowingPastLastAssignment.ts, 99 , 7))
326
+ >r : Symbol(r, Decl(narrowingPastLastAssignment.ts, 137 , 7))
240
327
}
241
328
242
329
// Repro from #52104
243
330
244
- const fooMap: Map<string,Array<number>> = new Map()
245
- >fooMap : Symbol(fooMap, Decl(narrowingPastLastAssignment.ts, 106, 5))
331
+ function f12() {
332
+ >f12 : Symbol(f12, Decl(narrowingPastLastAssignment.ts, 140, 1))
333
+
334
+ const fooMap: Map<string,Array<number>> = new Map()
335
+ >fooMap : Symbol(fooMap, Decl(narrowingPastLastAssignment.ts, 145, 9))
246
336
>Map : Symbol(Map, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
247
337
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 4 more)
248
338
>Map : Symbol(Map, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
249
339
250
- const values = [1, 2, 3, 4, 5];
251
- >values : Symbol(values, Decl(narrowingPastLastAssignment.ts, 107, 5 ))
340
+ const values = [1, 2, 3, 4, 5];
341
+ >values : Symbol(values, Decl(narrowingPastLastAssignment.ts, 146, 9 ))
252
342
253
- let foo = fooMap.get("a");
254
- >foo : Symbol(foo, Decl(narrowingPastLastAssignment.ts, 108, 3 ))
343
+ let foo = fooMap.get("a");
344
+ >foo : Symbol(foo, Decl(narrowingPastLastAssignment.ts, 147, 7 ))
255
345
>fooMap.get : Symbol(Map.get, Decl(lib.es2015.collection.d.ts, --, --))
256
- >fooMap : Symbol(fooMap, Decl(narrowingPastLastAssignment.ts, 106, 5 ))
346
+ >fooMap : Symbol(fooMap, Decl(narrowingPastLastAssignment.ts, 145, 9 ))
257
347
>get : Symbol(Map.get, Decl(lib.es2015.collection.d.ts, --, --))
258
348
259
- if (foo == null) {
260
- >foo : Symbol(foo, Decl(narrowingPastLastAssignment.ts, 108, 3 ))
349
+ if (foo == null) {
350
+ >foo : Symbol(foo, Decl(narrowingPastLastAssignment.ts, 147, 7 ))
261
351
262
- foo = [];
263
- >foo : Symbol(foo, Decl(narrowingPastLastAssignment.ts, 108, 3 ))
264
- }
265
- values.forEach(v => foo.push(v));
352
+ foo = [];
353
+ >foo : Symbol(foo, Decl(narrowingPastLastAssignment.ts, 147, 7 ))
354
+ }
355
+ values.forEach(v => foo.push(v));
266
356
>values.forEach : Symbol(Array.forEach, Decl(lib.es5.d.ts, --, --))
267
- >values : Symbol(values, Decl(narrowingPastLastAssignment.ts, 107, 5 ))
357
+ >values : Symbol(values, Decl(narrowingPastLastAssignment.ts, 146, 9 ))
268
358
>forEach : Symbol(Array.forEach, Decl(lib.es5.d.ts, --, --))
269
- >v : Symbol(v, Decl(narrowingPastLastAssignment.ts, 112, 15 ))
359
+ >v : Symbol(v, Decl(narrowingPastLastAssignment.ts, 151, 19 ))
270
360
>foo.push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
271
- >foo : Symbol(foo, Decl(narrowingPastLastAssignment.ts, 108, 3 ))
361
+ >foo : Symbol(foo, Decl(narrowingPastLastAssignment.ts, 147, 7 ))
272
362
>push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
273
- >v : Symbol(v, Decl(narrowingPastLastAssignment.ts, 112, 15))
363
+ >v : Symbol(v, Decl(narrowingPastLastAssignment.ts, 151, 19))
364
+ }
274
365
0 commit comments