@@ -377,3 +377,134 @@ u.b && u.a && f(u.a, u.b);
377
377
>u : Symbol(u, Decl(discriminantPropertyCheck.ts, 116, 5))
378
378
>b : Symbol(b, Decl(discriminantPropertyCheck.ts, 105, 13), Decl(discriminantPropertyCheck.ts, 110, 12))
379
379
380
+ // Repro from #29012
381
+
382
+ type Additive = '+' | '-';
383
+ >Additive : Symbol(Additive, Decl(discriminantPropertyCheck.ts, 120, 26))
384
+
385
+ type Multiplicative = '*' | '/';
386
+ >Multiplicative : Symbol(Multiplicative, Decl(discriminantPropertyCheck.ts, 124, 26))
387
+
388
+ interface AdditiveObj {
389
+ >AdditiveObj : Symbol(AdditiveObj, Decl(discriminantPropertyCheck.ts, 125, 32))
390
+
391
+ key: Additive
392
+ >key : Symbol(AdditiveObj.key, Decl(discriminantPropertyCheck.ts, 127, 23))
393
+ >Additive : Symbol(Additive, Decl(discriminantPropertyCheck.ts, 120, 26))
394
+ }
395
+
396
+ interface MultiplicativeObj {
397
+ >MultiplicativeObj : Symbol(MultiplicativeObj, Decl(discriminantPropertyCheck.ts, 129, 1))
398
+
399
+ key: Multiplicative
400
+ >key : Symbol(MultiplicativeObj.key, Decl(discriminantPropertyCheck.ts, 131, 29))
401
+ >Multiplicative : Symbol(Multiplicative, Decl(discriminantPropertyCheck.ts, 124, 26))
402
+ }
403
+
404
+ type Obj = AdditiveObj | MultiplicativeObj
405
+ >Obj : Symbol(Obj, Decl(discriminantPropertyCheck.ts, 133, 1))
406
+ >AdditiveObj : Symbol(AdditiveObj, Decl(discriminantPropertyCheck.ts, 125, 32))
407
+ >MultiplicativeObj : Symbol(MultiplicativeObj, Decl(discriminantPropertyCheck.ts, 129, 1))
408
+
409
+ export function foo(obj: Obj) {
410
+ >foo : Symbol(foo, Decl(discriminantPropertyCheck.ts, 135, 42))
411
+ >obj : Symbol(obj, Decl(discriminantPropertyCheck.ts, 137, 20))
412
+ >Obj : Symbol(Obj, Decl(discriminantPropertyCheck.ts, 133, 1))
413
+
414
+ switch (obj.key) {
415
+ >obj.key : Symbol(key, Decl(discriminantPropertyCheck.ts, 127, 23), Decl(discriminantPropertyCheck.ts, 131, 29))
416
+ >obj : Symbol(obj, Decl(discriminantPropertyCheck.ts, 137, 20))
417
+ >key : Symbol(key, Decl(discriminantPropertyCheck.ts, 127, 23), Decl(discriminantPropertyCheck.ts, 131, 29))
418
+
419
+ case '+': {
420
+ onlyPlus(obj.key);
421
+ >onlyPlus : Symbol(onlyPlus, Decl(discriminantPropertyCheck.ts, 144, 1))
422
+ >obj.key : Symbol(AdditiveObj.key, Decl(discriminantPropertyCheck.ts, 127, 23))
423
+ >obj : Symbol(obj, Decl(discriminantPropertyCheck.ts, 137, 20))
424
+ >key : Symbol(AdditiveObj.key, Decl(discriminantPropertyCheck.ts, 127, 23))
425
+
426
+ return;
427
+ }
428
+ }
429
+ }
430
+
431
+ function onlyPlus(arg: '+') {
432
+ >onlyPlus : Symbol(onlyPlus, Decl(discriminantPropertyCheck.ts, 144, 1))
433
+ >arg : Symbol(arg, Decl(discriminantPropertyCheck.ts, 146, 18))
434
+
435
+ return arg;
436
+ >arg : Symbol(arg, Decl(discriminantPropertyCheck.ts, 146, 18))
437
+ }
438
+
439
+ // Repro from #29496
440
+
441
+ declare function never(value: never): never;
442
+ >never : Symbol(never, Decl(discriminantPropertyCheck.ts, 148, 1))
443
+ >value : Symbol(value, Decl(discriminantPropertyCheck.ts, 152, 23))
444
+
445
+ const enum BarEnum {
446
+ >BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44))
447
+
448
+ bar1 = 1,
449
+ >bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 154, 20))
450
+
451
+ bar2 = 2,
452
+ >bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 155, 13))
453
+ }
454
+
455
+ type UnionOfBar = TypeBar1 | TypeBar2;
456
+ >UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 157, 1))
457
+ >TypeBar1 : Symbol(TypeBar1, Decl(discriminantPropertyCheck.ts, 159, 38))
458
+ >TypeBar2 : Symbol(TypeBar2, Decl(discriminantPropertyCheck.ts, 160, 39))
459
+
460
+ type TypeBar1 = { type: BarEnum.bar1 };
461
+ >TypeBar1 : Symbol(TypeBar1, Decl(discriminantPropertyCheck.ts, 159, 38))
462
+ >type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17))
463
+ >BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44))
464
+ >bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 154, 20))
465
+
466
+ type TypeBar2 = { type: BarEnum.bar2 };
467
+ >TypeBar2 : Symbol(TypeBar2, Decl(discriminantPropertyCheck.ts, 160, 39))
468
+ >type : Symbol(type, Decl(discriminantPropertyCheck.ts, 161, 17))
469
+ >BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44))
470
+ >bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 155, 13))
471
+
472
+ function func3(value: Partial<UnionOfBar>) {
473
+ >func3 : Symbol(func3, Decl(discriminantPropertyCheck.ts, 161, 39))
474
+ >value : Symbol(value, Decl(discriminantPropertyCheck.ts, 163, 15))
475
+ >Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --))
476
+ >UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 157, 1))
477
+
478
+ if (value.type !== undefined) {
479
+ >value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17))
480
+ >value : Symbol(value, Decl(discriminantPropertyCheck.ts, 163, 15))
481
+ >type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17))
482
+ >undefined : Symbol(undefined)
483
+
484
+ switch (value.type) {
485
+ >value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17))
486
+ >value : Symbol(value, Decl(discriminantPropertyCheck.ts, 163, 15))
487
+ >type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17))
488
+
489
+ case BarEnum.bar1:
490
+ >BarEnum.bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 154, 20))
491
+ >BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44))
492
+ >bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 154, 20))
493
+
494
+ break;
495
+ case BarEnum.bar2:
496
+ >BarEnum.bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 155, 13))
497
+ >BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44))
498
+ >bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 155, 13))
499
+
500
+ break;
501
+ default:
502
+ never(value.type);
503
+ >never : Symbol(never, Decl(discriminantPropertyCheck.ts, 148, 1))
504
+ >value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17))
505
+ >value : Symbol(value, Decl(discriminantPropertyCheck.ts, 163, 15))
506
+ >type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17))
507
+ }
508
+ }
509
+ }
510
+
0 commit comments