@@ -647,7 +647,7 @@ function f3<K extends keyof ArgMap>(funcs: Funcs, key: K, arg: ArgMap[K]) {
647647>ArgMap : Symbol(ArgMap, Decl(correlatedUnions.ts, 157, 1))
648648>K : Symbol(K, Decl(correlatedUnions.ts, 174, 12))
649649
650- const func: Func<K> = funcs[key]; // Error, Funcs[K] not assignable to Func<K>
650+ const func: Func<K> = funcs[key];
651651>func : Symbol(func, Decl(correlatedUnions.ts, 175, 9))
652652>Func : Symbol(Func, Decl(correlatedUnions.ts, 161, 39))
653653>K : Symbol(K, Decl(correlatedUnions.ts, 174, 12))
@@ -824,3 +824,107 @@ type Baz = { [K in keyof BarLookup]: BarLookup[K]['name'] };
824824>BarLookup : Symbol(BarLookup, Decl(correlatedUnions.ts, 230, 63))
825825>K : Symbol(K, Decl(correlatedUnions.ts, 234, 14))
826826
827+ // repro from #43982
828+
829+ interface Original {
830+ >Original : Symbol(Original, Decl(correlatedUnions.ts, 234, 60))
831+
832+ prop1: {
833+ >prop1 : Symbol(Original.prop1, Decl(correlatedUnions.ts, 238, 20))
834+
835+ subProp1: string;
836+ >subProp1 : Symbol(subProp1, Decl(correlatedUnions.ts, 239, 10))
837+
838+ subProp2: string;
839+ >subProp2 : Symbol(subProp2, Decl(correlatedUnions.ts, 240, 21))
840+
841+ };
842+ prop2: {
843+ >prop2 : Symbol(Original.prop2, Decl(correlatedUnions.ts, 242, 4))
844+
845+ subProp3: string;
846+ >subProp3 : Symbol(subProp3, Decl(correlatedUnions.ts, 243, 10))
847+
848+ subProp4: string;
849+ >subProp4 : Symbol(subProp4, Decl(correlatedUnions.ts, 244, 21))
850+
851+ };
852+ }
853+ type KeyOfOriginal = keyof Original;
854+ >KeyOfOriginal : Symbol(KeyOfOriginal, Decl(correlatedUnions.ts, 247, 1))
855+ >Original : Symbol(Original, Decl(correlatedUnions.ts, 234, 60))
856+
857+ type NestedKeyOfOriginalFor<T extends KeyOfOriginal> = keyof Original[T];
858+ >NestedKeyOfOriginalFor : Symbol(NestedKeyOfOriginalFor, Decl(correlatedUnions.ts, 248, 36))
859+ >T : Symbol(T, Decl(correlatedUnions.ts, 249, 28))
860+ >KeyOfOriginal : Symbol(KeyOfOriginal, Decl(correlatedUnions.ts, 247, 1))
861+ >Original : Symbol(Original, Decl(correlatedUnions.ts, 234, 60))
862+ >T : Symbol(T, Decl(correlatedUnions.ts, 249, 28))
863+
864+ type SameKeys<T> = {
865+ >SameKeys : Symbol(SameKeys, Decl(correlatedUnions.ts, 249, 73))
866+ >T : Symbol(T, Decl(correlatedUnions.ts, 251, 14))
867+
868+ [K in keyof T]: {
869+ >K : Symbol(K, Decl(correlatedUnions.ts, 252, 3))
870+ >T : Symbol(T, Decl(correlatedUnions.ts, 251, 14))
871+
872+ [K2 in keyof T[K]]: number;
873+ >K2 : Symbol(K2, Decl(correlatedUnions.ts, 253, 5))
874+ >T : Symbol(T, Decl(correlatedUnions.ts, 251, 14))
875+ >K : Symbol(K, Decl(correlatedUnions.ts, 252, 3))
876+
877+ };
878+ };
879+
880+ type MappedFromOriginal = SameKeys<Original>;
881+ >MappedFromOriginal : Symbol(MappedFromOriginal, Decl(correlatedUnions.ts, 255, 2))
882+ >SameKeys : Symbol(SameKeys, Decl(correlatedUnions.ts, 249, 73))
883+ >Original : Symbol(Original, Decl(correlatedUnions.ts, 234, 60))
884+
885+ const getStringAndNumberFromOriginalAndMapped = <
886+ >getStringAndNumberFromOriginalAndMapped : Symbol(getStringAndNumberFromOriginalAndMapped, Decl(correlatedUnions.ts, 259, 5))
887+
888+ K extends KeyOfOriginal,
889+ >K : Symbol(K, Decl(correlatedUnions.ts, 259, 49))
890+ >KeyOfOriginal : Symbol(KeyOfOriginal, Decl(correlatedUnions.ts, 247, 1))
891+
892+ N extends NestedKeyOfOriginalFor<K>
893+ >N : Symbol(N, Decl(correlatedUnions.ts, 260, 26))
894+ >NestedKeyOfOriginalFor : Symbol(NestedKeyOfOriginalFor, Decl(correlatedUnions.ts, 248, 36))
895+ >K : Symbol(K, Decl(correlatedUnions.ts, 259, 49))
896+
897+ >(
898+ original: Original,
899+ >original : Symbol(original, Decl(correlatedUnions.ts, 262, 2))
900+ >Original : Symbol(Original, Decl(correlatedUnions.ts, 234, 60))
901+
902+ mappedFromOriginal: MappedFromOriginal,
903+ >mappedFromOriginal : Symbol(mappedFromOriginal, Decl(correlatedUnions.ts, 263, 21))
904+ >MappedFromOriginal : Symbol(MappedFromOriginal, Decl(correlatedUnions.ts, 255, 2))
905+
906+ key: K,
907+ >key : Symbol(key, Decl(correlatedUnions.ts, 264, 41))
908+ >K : Symbol(K, Decl(correlatedUnions.ts, 259, 49))
909+
910+ nestedKey: N
911+ >nestedKey : Symbol(nestedKey, Decl(correlatedUnions.ts, 265, 9))
912+ >N : Symbol(N, Decl(correlatedUnions.ts, 260, 26))
913+
914+ ): [Original[K][N], MappedFromOriginal[K][N]] => {
915+ >Original : Symbol(Original, Decl(correlatedUnions.ts, 234, 60))
916+ >K : Symbol(K, Decl(correlatedUnions.ts, 259, 49))
917+ >N : Symbol(N, Decl(correlatedUnions.ts, 260, 26))
918+ >MappedFromOriginal : Symbol(MappedFromOriginal, Decl(correlatedUnions.ts, 255, 2))
919+ >K : Symbol(K, Decl(correlatedUnions.ts, 259, 49))
920+ >N : Symbol(N, Decl(correlatedUnions.ts, 260, 26))
921+
922+ return [original[key][nestedKey], mappedFromOriginal[key][nestedKey]];
923+ >original : Symbol(original, Decl(correlatedUnions.ts, 262, 2))
924+ >key : Symbol(key, Decl(correlatedUnions.ts, 264, 41))
925+ >nestedKey : Symbol(nestedKey, Decl(correlatedUnions.ts, 265, 9))
926+ >mappedFromOriginal : Symbol(mappedFromOriginal, Decl(correlatedUnions.ts, 263, 21))
927+ >key : Symbol(key, Decl(correlatedUnions.ts, 264, 41))
928+ >nestedKey : Symbol(nestedKey, Decl(correlatedUnions.ts, 265, 9))
929+
930+ };
0 commit comments