Skip to content

Commit 53f37cf

Browse files
committed
Add test
1 parent f20a4fd commit 53f37cf

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// @strict: true
2+
3+
// Repro from #30050
4+
5+
interface Obj<T> {
6+
ref: T;
7+
}
8+
interface Func<T> {
9+
(x: T): void;
10+
}
11+
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
12+
type CtorOf<T> = (arg: UnionToIntersection<T>) => T;
13+
14+
interface Big {
15+
"0": { common?: string; "0"?: number, ref?: Obj<Big["0"]> | Func<Big["0"]>; }
16+
"1": { common?: string; "1"?: number, ref?: Obj<Big["1"]> | Func<Big["1"]>; }
17+
"2": { common?: string; "2"?: number, ref?: Obj<Big["2"]> | Func<Big["2"]>; }
18+
"3": { common?: string; "3"?: number, ref?: Obj<Big["3"]> | Func<Big["3"]>; }
19+
"4": { common?: string; "4"?: number, ref?: Obj<Big["4"]> | Func<Big["4"]>; }
20+
"5": { common?: string; "5"?: number, ref?: Obj<Big["5"]> | Func<Big["5"]>; }
21+
"6": { common?: string; "6"?: number, ref?: Obj<Big["6"]> | Func<Big["6"]>; }
22+
"7": { common?: string; "7"?: number, ref?: Obj<Big["7"]> | Func<Big["7"]>; }
23+
"8": { common?: string; "8"?: number, ref?: Obj<Big["8"]> | Func<Big["8"]>; }
24+
"9": { common?: string; "9"?: number, ref?: Obj<Big["9"]> | Func<Big["9"]>; }
25+
"10": { common?: string; "10"?: number, ref?: Obj<Big["10"]> | Func<Big["10"]>; }
26+
"11": { common?: string; "11"?: number, ref?: Obj<Big["11"]> | Func<Big["11"]>; }
27+
"12": { common?: string; "12"?: number, ref?: Obj<Big["12"]> | Func<Big["12"]>; }
28+
"13": { common?: string; "13"?: number, ref?: Obj<Big["13"]> | Func<Big["13"]>; }
29+
"14": { common?: string; "14"?: number, ref?: Obj<Big["14"]> | Func<Big["14"]>; }
30+
"15": { common?: string; "15"?: number, ref?: Obj<Big["15"]> | Func<Big["15"]>; }
31+
"16": { common?: string; "16"?: number, ref?: Obj<Big["16"]> | Func<Big["16"]>; }
32+
"17": { common?: string; "17"?: number, ref?: Obj<Big["17"]> | Func<Big["17"]>; }
33+
}
34+
declare function getCtor<T extends keyof Big>(comp: T): CtorOf<Big[T]>
35+
36+
declare var all: keyof Big;
37+
const ctor = getCtor(all);
38+
const comp = ctor({ common: "ok", ref: x => console.log(x) });

0 commit comments

Comments
 (0)