@@ -675,3 +675,81 @@ function f4<K extends keyof ArgMap>(x: Funcs[keyof ArgMap], y: Funcs[K]) {
675675>y : Symbol(y, Decl(correlatedUnions.ts, 179, 59))
676676}
677677
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