@@ -377,3 +377,75 @@ 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 #29496
381+
382+ declare function never(value: never): never;
383+ >never : Symbol(never, Decl(discriminantPropertyCheck.ts, 120, 26))
384+ >value : Symbol(value, Decl(discriminantPropertyCheck.ts, 124, 23))
385+
386+ const enum BarEnum {
387+ >BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44))
388+
389+ bar1 = 1,
390+ >bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126, 20))
391+
392+ bar2 = 2,
393+ >bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127, 13))
394+ }
395+
396+ type 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))
400+
401+ type 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))
406+
407+ type 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))
412+
413+ function func3(value: Partial<UnionOfBar>) {
414+ >func3 : Symbol(func3, Decl(discriminantPropertyCheck.ts, 133, 39))
415+ >value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135, 15))
416+ >Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --))
417+ >UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 129, 1))
418+
419+ 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))
423+ >undefined : Symbol(undefined)
424+
425+ 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))
429+
430+ 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))
434+
435+ break;
436+ 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))
440+
441+ break;
442+ default:
443+ 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))
448+ }
449+ }
450+ }
451+
0 commit comments