@@ -377,74 +377,133 @@ 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
+
380
439
// Repro from #29496
381
440
382
441
declare 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))
385
444
386
445
const enum BarEnum {
387
- >BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124 , 44))
446
+ >BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152 , 44))
388
447
389
448
bar1 = 1,
390
- >bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126 , 20))
449
+ >bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 154 , 20))
391
450
392
451
bar2 = 2,
393
- >bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127 , 13))
452
+ >bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 155 , 13))
394
453
}
395
454
396
455
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))
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))
400
459
401
460
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))
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))
406
465
407
466
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))
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))
412
471
413
472
function 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))
416
475
>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))
418
477
419
478
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))
423
482
>undefined : Symbol(undefined)
424
483
425
484
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))
429
488
430
489
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))
434
493
435
494
break;
436
495
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))
440
499
441
500
break;
442
501
default:
443
502
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))
448
507
}
449
508
}
450
509
}
0 commit comments