@@ -273,3 +273,126 @@ function f31(foo: Foo) {
273
273
}
274
274
}
275
275
276
+ // Repro from #33448
277
+
278
+ type a = {
279
+ >a : Symbol(a, Decl(discriminatedUnionTypes2.ts, 93, 1))
280
+
281
+ type: 'a',
282
+ >type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 97, 10))
283
+
284
+ data: string
285
+ >data : Symbol(data, Decl(discriminatedUnionTypes2.ts, 98, 14))
286
+ }
287
+ type b = {
288
+ >b : Symbol(b, Decl(discriminatedUnionTypes2.ts, 100, 1))
289
+
290
+ type: 'b',
291
+ >type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 101, 10))
292
+
293
+ name: string
294
+ >name : Symbol(name, Decl(discriminatedUnionTypes2.ts, 102, 14))
295
+ }
296
+ type c = {
297
+ >c : Symbol(c, Decl(discriminatedUnionTypes2.ts, 104, 1))
298
+
299
+ type: 'c',
300
+ >type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 105, 10))
301
+
302
+ other: string
303
+ >other : Symbol(other, Decl(discriminatedUnionTypes2.ts, 106, 14))
304
+ }
305
+
306
+ type abc = a | b | c;
307
+ >abc : Symbol(abc, Decl(discriminatedUnionTypes2.ts, 108, 1))
308
+ >a : Symbol(a, Decl(discriminatedUnionTypes2.ts, 93, 1))
309
+ >b : Symbol(b, Decl(discriminatedUnionTypes2.ts, 100, 1))
310
+ >c : Symbol(c, Decl(discriminatedUnionTypes2.ts, 104, 1))
311
+
312
+ function f(problem: abc & (b | c)) {
313
+ >f : Symbol(f, Decl(discriminatedUnionTypes2.ts, 110, 21))
314
+ >problem : Symbol(problem, Decl(discriminatedUnionTypes2.ts, 112, 11))
315
+ >abc : Symbol(abc, Decl(discriminatedUnionTypes2.ts, 108, 1))
316
+ >b : Symbol(b, Decl(discriminatedUnionTypes2.ts, 100, 1))
317
+ >c : Symbol(c, Decl(discriminatedUnionTypes2.ts, 104, 1))
318
+
319
+ if (problem.type === 'b') {
320
+ >problem.type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 101, 10), Decl(discriminatedUnionTypes2.ts, 105, 10), Decl(discriminatedUnionTypes2.ts, 97, 10), Decl(discriminatedUnionTypes2.ts, 101, 10), Decl(discriminatedUnionTypes2.ts, 97, 10) ... and 5 more)
321
+ >problem : Symbol(problem, Decl(discriminatedUnionTypes2.ts, 112, 11))
322
+ >type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 101, 10), Decl(discriminatedUnionTypes2.ts, 105, 10), Decl(discriminatedUnionTypes2.ts, 97, 10), Decl(discriminatedUnionTypes2.ts, 101, 10), Decl(discriminatedUnionTypes2.ts, 97, 10) ... and 5 more)
323
+
324
+ problem.name;
325
+ >problem.name : Symbol(name, Decl(discriminatedUnionTypes2.ts, 102, 14))
326
+ >problem : Symbol(problem, Decl(discriminatedUnionTypes2.ts, 112, 11))
327
+ >name : Symbol(name, Decl(discriminatedUnionTypes2.ts, 102, 14))
328
+ }
329
+ else {
330
+ problem.other;
331
+ >problem.other : Symbol(other, Decl(discriminatedUnionTypes2.ts, 106, 14))
332
+ >problem : Symbol(problem, Decl(discriminatedUnionTypes2.ts, 112, 11))
333
+ >other : Symbol(other, Decl(discriminatedUnionTypes2.ts, 106, 14))
334
+ }
335
+ }
336
+
337
+ type RuntimeValue =
338
+ >RuntimeValue : Symbol(RuntimeValue, Decl(discriminatedUnionTypes2.ts, 119, 1))
339
+
340
+ | { type: 'number', value: number }
341
+ >type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 122, 7))
342
+ >value : Symbol(value, Decl(discriminatedUnionTypes2.ts, 122, 23))
343
+
344
+ | { type: 'string', value: string }
345
+ >type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 123, 7))
346
+ >value : Symbol(value, Decl(discriminatedUnionTypes2.ts, 123, 23))
347
+
348
+ | { type: 'boolean', value: boolean };
349
+ >type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 124, 7))
350
+ >value : Symbol(value, Decl(discriminatedUnionTypes2.ts, 124, 24))
351
+
352
+ function foo1(x: RuntimeValue & { type: 'number' }) {
353
+ >foo1 : Symbol(foo1, Decl(discriminatedUnionTypes2.ts, 124, 42))
354
+ >x : Symbol(x, Decl(discriminatedUnionTypes2.ts, 126, 14))
355
+ >RuntimeValue : Symbol(RuntimeValue, Decl(discriminatedUnionTypes2.ts, 119, 1))
356
+ >type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 126, 33))
357
+
358
+ if (x.type === 'number') {
359
+ >x.type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 122, 7), Decl(discriminatedUnionTypes2.ts, 126, 33), Decl(discriminatedUnionTypes2.ts, 123, 7), Decl(discriminatedUnionTypes2.ts, 126, 33), Decl(discriminatedUnionTypes2.ts, 124, 7) ... and 1 more)
360
+ >x : Symbol(x, Decl(discriminatedUnionTypes2.ts, 126, 14))
361
+ >type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 122, 7), Decl(discriminatedUnionTypes2.ts, 126, 33), Decl(discriminatedUnionTypes2.ts, 123, 7), Decl(discriminatedUnionTypes2.ts, 126, 33), Decl(discriminatedUnionTypes2.ts, 124, 7) ... and 1 more)
362
+
363
+ x.value; // number
364
+ >x.value : Symbol(value, Decl(discriminatedUnionTypes2.ts, 122, 23))
365
+ >x : Symbol(x, Decl(discriminatedUnionTypes2.ts, 126, 14))
366
+ >value : Symbol(value, Decl(discriminatedUnionTypes2.ts, 122, 23))
367
+ }
368
+ else {
369
+ x.value; // Error, x is never
370
+ >x : Symbol(x, Decl(discriminatedUnionTypes2.ts, 126, 14))
371
+ }
372
+ }
373
+
374
+ function foo2(x: RuntimeValue & ({ type: 'number' } | { type: 'string' })) {
375
+ >foo2 : Symbol(foo2, Decl(discriminatedUnionTypes2.ts, 133, 1))
376
+ >x : Symbol(x, Decl(discriminatedUnionTypes2.ts, 135, 14))
377
+ >RuntimeValue : Symbol(RuntimeValue, Decl(discriminatedUnionTypes2.ts, 119, 1))
378
+ >type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 135, 34))
379
+ >type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 135, 55))
380
+
381
+ if (x.type === 'number') {
382
+ >x.type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 122, 7), Decl(discriminatedUnionTypes2.ts, 135, 34), Decl(discriminatedUnionTypes2.ts, 122, 7), Decl(discriminatedUnionTypes2.ts, 135, 55), Decl(discriminatedUnionTypes2.ts, 123, 7) ... and 7 more)
383
+ >x : Symbol(x, Decl(discriminatedUnionTypes2.ts, 135, 14))
384
+ >type : Symbol(type, Decl(discriminatedUnionTypes2.ts, 122, 7), Decl(discriminatedUnionTypes2.ts, 135, 34), Decl(discriminatedUnionTypes2.ts, 122, 7), Decl(discriminatedUnionTypes2.ts, 135, 55), Decl(discriminatedUnionTypes2.ts, 123, 7) ... and 7 more)
385
+
386
+ x.value; // number
387
+ >x.value : Symbol(value, Decl(discriminatedUnionTypes2.ts, 122, 23))
388
+ >x : Symbol(x, Decl(discriminatedUnionTypes2.ts, 135, 14))
389
+ >value : Symbol(value, Decl(discriminatedUnionTypes2.ts, 122, 23))
390
+ }
391
+ else {
392
+ x.value; // string
393
+ >x.value : Symbol(value, Decl(discriminatedUnionTypes2.ts, 123, 23))
394
+ >x : Symbol(x, Decl(discriminatedUnionTypes2.ts, 135, 14))
395
+ >value : Symbol(value, Decl(discriminatedUnionTypes2.ts, 123, 23))
396
+ }
397
+ }
398
+
0 commit comments