@@ -377,74 +377,133 @@ u.b && u.a && f(u.a, u.b);
377377>u : Symbol(u, Decl(discriminantPropertyCheck.ts, 116, 5))
378378>b : Symbol(b, Decl(discriminantPropertyCheck.ts, 105, 13), Decl(discriminantPropertyCheck.ts, 110, 12))
379379
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+
380439// Repro from #29496
381440
382441declare function never(value: never): never;
383- >never : Symbol(never, Decl(discriminantPropertyCheck.ts, 120, 26 ))
384- >value : Symbol(value, Decl(discriminantPropertyCheck.ts, 124 , 23))
442+ >never : Symbol(never, Decl(discriminantPropertyCheck.ts, 148, 1 ))
443+ >value : Symbol(value, Decl(discriminantPropertyCheck.ts, 152 , 23))
385444
386445const enum BarEnum {
387- >BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124 , 44))
446+ >BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152 , 44))
388447
389448 bar1 = 1,
390- >bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126 , 20))
449+ >bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 154 , 20))
391450
392451 bar2 = 2,
393- >bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127 , 13))
452+ >bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 155 , 13))
394453}
395454
396455type UnionOfBar = TypeBar1 | TypeBar2;
397- >UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 129 , 1))
398- >TypeBar1 : Symbol(TypeBar1, Decl(discriminantPropertyCheck.ts, 131 , 38))
399- >TypeBar2 : Symbol(TypeBar2, Decl(discriminantPropertyCheck.ts, 132 , 39))
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))
400459
401460type TypeBar1 = { type: BarEnum.bar1 };
402- >TypeBar1 : Symbol(TypeBar1, Decl(discriminantPropertyCheck.ts, 131 , 38))
403- >type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132 , 17))
404- >BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124 , 44))
405- >bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126 , 20))
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))
406465
407466type TypeBar2 = { type: BarEnum.bar2 };
408- >TypeBar2 : Symbol(TypeBar2, Decl(discriminantPropertyCheck.ts, 132 , 39))
409- >type : Symbol(type, Decl(discriminantPropertyCheck.ts, 133 , 17))
410- >BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124 , 44))
411- >bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127 , 13))
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))
412471
413472function func3(value: Partial<UnionOfBar>) {
414- >func3 : Symbol(func3, Decl(discriminantPropertyCheck.ts, 133 , 39))
415- >value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135 , 15))
473+ >func3 : Symbol(func3, Decl(discriminantPropertyCheck.ts, 161 , 39))
474+ >value : Symbol(value, Decl(discriminantPropertyCheck.ts, 163 , 15))
416475>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --))
417- >UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 129 , 1))
476+ >UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 157 , 1))
418477
419478 if (value.type !== undefined) {
420- >value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132 , 17), Decl(discriminantPropertyCheck.ts, 133 , 17))
421- >value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135 , 15))
422- >type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132 , 17), Decl(discriminantPropertyCheck.ts, 133 , 17))
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))
423482>undefined : Symbol(undefined)
424483
425484 switch (value.type) {
426- >value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132 , 17), Decl(discriminantPropertyCheck.ts, 133 , 17))
427- >value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135 , 15))
428- >type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132 , 17), Decl(discriminantPropertyCheck.ts, 133 , 17))
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))
429488
430489 case BarEnum.bar1:
431- >BarEnum.bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126 , 20))
432- >BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124 , 44))
433- >bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126 , 20))
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))
434493
435494 break;
436495 case BarEnum.bar2:
437- >BarEnum.bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127 , 13))
438- >BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124 , 44))
439- >bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127 , 13))
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))
440499
441500 break;
442501 default:
443502 never(value.type);
444- >never : Symbol(never, Decl(discriminantPropertyCheck.ts, 120, 26 ))
445- >value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132 , 17), Decl(discriminantPropertyCheck.ts, 133 , 17))
446- >value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135 , 15))
447- >type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132 , 17), Decl(discriminantPropertyCheck.ts, 133 , 17))
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))
448507 }
449508 }
450509}
0 commit comments