@@ -675,3 +675,81 @@ function f4<K extends keyof ArgMap>(x: Funcs[keyof ArgMap], y: Funcs[K]) {
675
675
>y : Symbol(y, Decl(correlatedUnions.ts, 179, 59))
676
676
}
677
677
678
+ // Repro from #47890
679
+
680
+ interface MyObj {
681
+ >MyObj : Symbol(MyObj, Decl(correlatedUnions.ts, 181, 1))
682
+
683
+ someKey: {
684
+ >someKey : Symbol(MyObj.someKey, Decl(correlatedUnions.ts, 185, 17))
685
+
686
+ name: string;
687
+ >name : Symbol(name, Decl(correlatedUnions.ts, 186, 14))
688
+ }
689
+ someOtherKey: {
690
+ >someOtherKey : Symbol(MyObj.someOtherKey, Decl(correlatedUnions.ts, 188, 5))
691
+
692
+ name: number;
693
+ >name : Symbol(name, Decl(correlatedUnions.ts, 189, 19))
694
+ }
695
+ }
696
+
697
+ const ref: MyObj = {
698
+ >ref : Symbol(ref, Decl(correlatedUnions.ts, 194, 5))
699
+ >MyObj : Symbol(MyObj, Decl(correlatedUnions.ts, 181, 1))
700
+
701
+ someKey: { name: "" },
702
+ >someKey : Symbol(someKey, Decl(correlatedUnions.ts, 194, 20))
703
+ >name : Symbol(name, Decl(correlatedUnions.ts, 195, 14))
704
+
705
+ someOtherKey: { name: 42 }
706
+ >someOtherKey : Symbol(someOtherKey, Decl(correlatedUnions.ts, 195, 26))
707
+ >name : Symbol(name, Decl(correlatedUnions.ts, 196, 19))
708
+
709
+ };
710
+
711
+ function func<K extends keyof MyObj>(k: K): MyObj[K]['name'] | undefined {
712
+ >func : Symbol(func, Decl(correlatedUnions.ts, 197, 2))
713
+ >K : Symbol(K, Decl(correlatedUnions.ts, 199, 14))
714
+ >MyObj : Symbol(MyObj, Decl(correlatedUnions.ts, 181, 1))
715
+ >k : Symbol(k, Decl(correlatedUnions.ts, 199, 37))
716
+ >K : Symbol(K, Decl(correlatedUnions.ts, 199, 14))
717
+ >MyObj : Symbol(MyObj, Decl(correlatedUnions.ts, 181, 1))
718
+ >K : Symbol(K, Decl(correlatedUnions.ts, 199, 14))
719
+
720
+ const myObj: Partial<MyObj>[K] = ref[k];
721
+ >myObj : Symbol(myObj, Decl(correlatedUnions.ts, 200, 9))
722
+ >Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --))
723
+ >MyObj : Symbol(MyObj, Decl(correlatedUnions.ts, 181, 1))
724
+ >K : Symbol(K, Decl(correlatedUnions.ts, 199, 14))
725
+ >ref : Symbol(ref, Decl(correlatedUnions.ts, 194, 5))
726
+ >k : Symbol(k, Decl(correlatedUnions.ts, 199, 37))
727
+
728
+ if (myObj) {
729
+ >myObj : Symbol(myObj, Decl(correlatedUnions.ts, 200, 9))
730
+
731
+ return myObj.name;
732
+ >myObj.name : Symbol(name, Decl(correlatedUnions.ts, 186, 14), Decl(correlatedUnions.ts, 189, 19))
733
+ >myObj : Symbol(myObj, Decl(correlatedUnions.ts, 200, 9))
734
+ >name : Symbol(name, Decl(correlatedUnions.ts, 186, 14), Decl(correlatedUnions.ts, 189, 19))
735
+ }
736
+ const myObj2: Partial<MyObj>[keyof MyObj] = ref[k];
737
+ >myObj2 : Symbol(myObj2, Decl(correlatedUnions.ts, 204, 9))
738
+ >Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --))
739
+ >MyObj : Symbol(MyObj, Decl(correlatedUnions.ts, 181, 1))
740
+ >MyObj : Symbol(MyObj, Decl(correlatedUnions.ts, 181, 1))
741
+ >ref : Symbol(ref, Decl(correlatedUnions.ts, 194, 5))
742
+ >k : Symbol(k, Decl(correlatedUnions.ts, 199, 37))
743
+
744
+ if (myObj2) {
745
+ >myObj2 : Symbol(myObj2, Decl(correlatedUnions.ts, 204, 9))
746
+
747
+ return myObj2.name;
748
+ >myObj2.name : Symbol(name, Decl(correlatedUnions.ts, 186, 14), Decl(correlatedUnions.ts, 189, 19))
749
+ >myObj2 : Symbol(myObj2, Decl(correlatedUnions.ts, 204, 9))
750
+ >name : Symbol(name, Decl(correlatedUnions.ts, 186, 14), Decl(correlatedUnions.ts, 189, 19))
751
+ }
752
+ return undefined;
753
+ >undefined : Symbol(undefined)
754
+ }
755
+
0 commit comments