@@ -573,3 +573,89 @@ function ff1() {
573573>apply : Symbol(apply, Decl(correlatedUnions.ts, 150, 5))
574574}
575575
576+ // Repro from #47368
577+
578+ type ArgMap = { a: number, b: string };
579+ >ArgMap : Symbol(ArgMap, Decl(correlatedUnions.ts, 157, 1))
580+ >a : Symbol(a, Decl(correlatedUnions.ts, 161, 15))
581+ >b : Symbol(b, Decl(correlatedUnions.ts, 161, 26))
582+
583+ type Func<K extends keyof ArgMap> = (x: ArgMap[K]) => void;
584+ >Func : Symbol(Func, Decl(correlatedUnions.ts, 161, 39))
585+ >K : Symbol(K, Decl(correlatedUnions.ts, 162, 10))
586+ >ArgMap : Symbol(ArgMap, Decl(correlatedUnions.ts, 157, 1))
587+ >x : Symbol(x, Decl(correlatedUnions.ts, 162, 37))
588+ >ArgMap : Symbol(ArgMap, Decl(correlatedUnions.ts, 157, 1))
589+ >K : Symbol(K, Decl(correlatedUnions.ts, 162, 10))
590+
591+ type Funcs = { [K in keyof ArgMap]: Func<K> };
592+ >Funcs : Symbol(Funcs, Decl(correlatedUnions.ts, 162, 59))
593+ >K : Symbol(K, Decl(correlatedUnions.ts, 163, 16))
594+ >ArgMap : Symbol(ArgMap, Decl(correlatedUnions.ts, 157, 1))
595+ >Func : Symbol(Func, Decl(correlatedUnions.ts, 161, 39))
596+ >K : Symbol(K, Decl(correlatedUnions.ts, 163, 16))
597+
598+ function f1<K extends keyof ArgMap>(funcs: Funcs, key: K, arg: ArgMap[K]) {
599+ >f1 : Symbol(f1, Decl(correlatedUnions.ts, 163, 46))
600+ >K : Symbol(K, Decl(correlatedUnions.ts, 165, 12))
601+ >ArgMap : Symbol(ArgMap, Decl(correlatedUnions.ts, 157, 1))
602+ >funcs : Symbol(funcs, Decl(correlatedUnions.ts, 165, 36))
603+ >Funcs : Symbol(Funcs, Decl(correlatedUnions.ts, 162, 59))
604+ >key : Symbol(key, Decl(correlatedUnions.ts, 165, 49))
605+ >K : Symbol(K, Decl(correlatedUnions.ts, 165, 12))
606+ >arg : Symbol(arg, Decl(correlatedUnions.ts, 165, 57))
607+ >ArgMap : Symbol(ArgMap, Decl(correlatedUnions.ts, 157, 1))
608+ >K : Symbol(K, Decl(correlatedUnions.ts, 165, 12))
609+
610+ funcs[key](arg);
611+ >funcs : Symbol(funcs, Decl(correlatedUnions.ts, 165, 36))
612+ >key : Symbol(key, Decl(correlatedUnions.ts, 165, 49))
613+ >arg : Symbol(arg, Decl(correlatedUnions.ts, 165, 57))
614+ }
615+
616+ function f2<K extends keyof ArgMap>(funcs: Funcs, key: K, arg: ArgMap[K]) {
617+ >f2 : Symbol(f2, Decl(correlatedUnions.ts, 167, 1))
618+ >K : Symbol(K, Decl(correlatedUnions.ts, 169, 12))
619+ >ArgMap : Symbol(ArgMap, Decl(correlatedUnions.ts, 157, 1))
620+ >funcs : Symbol(funcs, Decl(correlatedUnions.ts, 169, 36))
621+ >Funcs : Symbol(Funcs, Decl(correlatedUnions.ts, 162, 59))
622+ >key : Symbol(key, Decl(correlatedUnions.ts, 169, 49))
623+ >K : Symbol(K, Decl(correlatedUnions.ts, 169, 12))
624+ >arg : Symbol(arg, Decl(correlatedUnions.ts, 169, 57))
625+ >ArgMap : Symbol(ArgMap, Decl(correlatedUnions.ts, 157, 1))
626+ >K : Symbol(K, Decl(correlatedUnions.ts, 169, 12))
627+
628+ const func = funcs[key]; // Type Funcs[K]
629+ >func : Symbol(func, Decl(correlatedUnions.ts, 170, 9))
630+ >funcs : Symbol(funcs, Decl(correlatedUnions.ts, 169, 36))
631+ >key : Symbol(key, Decl(correlatedUnions.ts, 169, 49))
632+
633+ func(arg);
634+ >func : Symbol(func, Decl(correlatedUnions.ts, 170, 9))
635+ >arg : Symbol(arg, Decl(correlatedUnions.ts, 169, 57))
636+ }
637+
638+ function f3<K extends keyof ArgMap>(funcs: Funcs, key: K, arg: ArgMap[K]) {
639+ >f3 : Symbol(f3, Decl(correlatedUnions.ts, 172, 1))
640+ >K : Symbol(K, Decl(correlatedUnions.ts, 174, 12))
641+ >ArgMap : Symbol(ArgMap, Decl(correlatedUnions.ts, 157, 1))
642+ >funcs : Symbol(funcs, Decl(correlatedUnions.ts, 174, 36))
643+ >Funcs : Symbol(Funcs, Decl(correlatedUnions.ts, 162, 59))
644+ >key : Symbol(key, Decl(correlatedUnions.ts, 174, 49))
645+ >K : Symbol(K, Decl(correlatedUnions.ts, 174, 12))
646+ >arg : Symbol(arg, Decl(correlatedUnions.ts, 174, 57))
647+ >ArgMap : Symbol(ArgMap, Decl(correlatedUnions.ts, 157, 1))
648+ >K : Symbol(K, Decl(correlatedUnions.ts, 174, 12))
649+
650+ const func: Func<K> = funcs[key]; // Error, Funcs[K] not assignable to Func<K>
651+ >func : Symbol(func, Decl(correlatedUnions.ts, 175, 9))
652+ >Func : Symbol(Func, Decl(correlatedUnions.ts, 161, 39))
653+ >K : Symbol(K, Decl(correlatedUnions.ts, 174, 12))
654+ >funcs : Symbol(funcs, Decl(correlatedUnions.ts, 174, 36))
655+ >key : Symbol(key, Decl(correlatedUnions.ts, 174, 49))
656+
657+ func(arg);
658+ >func : Symbol(func, Decl(correlatedUnions.ts, 175, 9))
659+ >arg : Symbol(arg, Decl(correlatedUnions.ts, 174, 57))
660+ }
661+
0 commit comments