@@ -573,3 +573,89 @@ function ff1() {
573
573
>apply : Symbol(apply, Decl(correlatedUnions.ts, 150, 5))
574
574
}
575
575
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