Skip to content

Commit 8c278bf

Browse files
committed
Add regression test
1 parent bd0833a commit 8c278bf

File tree

5 files changed

+147
-3
lines changed

5 files changed

+147
-3
lines changed

tests/baselines/reference/deepComparisons.errors.txt

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,23 @@ tests/cases/compiler/deepComparisons.ts(4,9): error TS2322: Type 'T[K1][K2]' is
4646

4747
function f3<U>() {
4848
let x: Foo1<U> = 0 as any as Bar<U>; // No error!
49-
}
49+
}
50+
51+
// Repro from #46500
52+
53+
type F<T> = {} & (
54+
T extends [any, ...any[]]
55+
? { [K in keyof T]?: F<T[K]> }
56+
: T extends any[]
57+
? F<T[number]>[]
58+
: T extends { [K: string]: any }
59+
? { [K in keyof T]?: F<T[K]> }
60+
: { x: string }
61+
);
62+
63+
declare function f<T = any>(): F<T>;
64+
65+
function g() {
66+
return f() as F<any>;
67+
}
68+

tests/baselines/reference/deepComparisons.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,26 @@ type Foo2<T> = { x: Foo1<T> };
1717

1818
function f3<U>() {
1919
let x: Foo1<U> = 0 as any as Bar<U>; // No error!
20-
}
20+
}
21+
22+
// Repro from #46500
23+
24+
type F<T> = {} & (
25+
T extends [any, ...any[]]
26+
? { [K in keyof T]?: F<T[K]> }
27+
: T extends any[]
28+
? F<T[number]>[]
29+
: T extends { [K: string]: any }
30+
? { [K in keyof T]?: F<T[K]> }
31+
: { x: string }
32+
);
33+
34+
declare function f<T = any>(): F<T>;
35+
36+
function g() {
37+
return f() as F<any>;
38+
}
39+
2140

2241
//// [deepComparisons.js]
2342
function f1() {
@@ -31,3 +50,6 @@ function f2() {
3150
function f3() {
3251
var x = 0; // No error!
3352
}
53+
function g() {
54+
return f();
55+
}

tests/baselines/reference/deepComparisons.symbols

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,57 @@ function f3<U>() {
8484
>Bar : Symbol(Bar, Decl(deepComparisons.ts, 6, 28))
8585
>U : Symbol(U, Decl(deepComparisons.ts, 16, 12))
8686
}
87+
88+
// Repro from #46500
89+
90+
type F<T> = {} & (
91+
>F : Symbol(F, Decl(deepComparisons.ts, 18, 1))
92+
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))
93+
94+
T extends [any, ...any[]]
95+
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))
96+
97+
? { [K in keyof T]?: F<T[K]> }
98+
>K : Symbol(K, Decl(deepComparisons.ts, 24, 13))
99+
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))
100+
>F : Symbol(F, Decl(deepComparisons.ts, 18, 1))
101+
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))
102+
>K : Symbol(K, Decl(deepComparisons.ts, 24, 13))
103+
104+
: T extends any[]
105+
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))
106+
107+
? F<T[number]>[]
108+
>F : Symbol(F, Decl(deepComparisons.ts, 18, 1))
109+
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))
110+
111+
: T extends { [K: string]: any }
112+
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))
113+
>K : Symbol(K, Decl(deepComparisons.ts, 27, 27))
114+
115+
? { [K in keyof T]?: F<T[K]> }
116+
>K : Symbol(K, Decl(deepComparisons.ts, 28, 21))
117+
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))
118+
>F : Symbol(F, Decl(deepComparisons.ts, 18, 1))
119+
>T : Symbol(T, Decl(deepComparisons.ts, 22, 7))
120+
>K : Symbol(K, Decl(deepComparisons.ts, 28, 21))
121+
122+
: { x: string }
123+
>x : Symbol(x, Decl(deepComparisons.ts, 29, 19))
124+
125+
);
126+
127+
declare function f<T = any>(): F<T>;
128+
>f : Symbol(f, Decl(deepComparisons.ts, 30, 2))
129+
>T : Symbol(T, Decl(deepComparisons.ts, 32, 19))
130+
>F : Symbol(F, Decl(deepComparisons.ts, 18, 1))
131+
>T : Symbol(T, Decl(deepComparisons.ts, 32, 19))
132+
133+
function g() {
134+
>g : Symbol(g, Decl(deepComparisons.ts, 32, 36))
135+
136+
return f() as F<any>;
137+
>f : Symbol(f, Decl(deepComparisons.ts, 30, 2))
138+
>F : Symbol(F, Decl(deepComparisons.ts, 18, 1))
139+
}
140+

tests/baselines/reference/deepComparisons.types

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,34 @@ function f3<U>() {
5656
>0 as any : any
5757
>0 : 0
5858
}
59+
60+
// Repro from #46500
61+
62+
type F<T> = {} & (
63+
>F : F<T>
64+
65+
T extends [any, ...any[]]
66+
? { [K in keyof T]?: F<T[K]> }
67+
: T extends any[]
68+
? F<T[number]>[]
69+
: T extends { [K: string]: any }
70+
>K : string
71+
72+
? { [K in keyof T]?: F<T[K]> }
73+
: { x: string }
74+
>x : string
75+
76+
);
77+
78+
declare function f<T = any>(): F<T>;
79+
>f : <T = any>() => F<T>
80+
81+
function g() {
82+
>g : () => F<any>
83+
84+
return f() as F<any>;
85+
>f() as F<any> : F<any>
86+
>f() : F<any>
87+
>f : <T = any>() => F<T>
88+
}
89+

tests/cases/compiler/deepComparisons.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,22 @@ type Foo2<T> = { x: Foo1<T> };
1616

1717
function f3<U>() {
1818
let x: Foo1<U> = 0 as any as Bar<U>; // No error!
19-
}
19+
}
20+
21+
// Repro from #46500
22+
23+
type F<T> = {} & (
24+
T extends [any, ...any[]]
25+
? { [K in keyof T]?: F<T[K]> }
26+
: T extends any[]
27+
? F<T[number]>[]
28+
: T extends { [K: string]: any }
29+
? { [K in keyof T]?: F<T[K]> }
30+
: { x: string }
31+
);
32+
33+
declare function f<T = any>(): F<T>;
34+
35+
function g() {
36+
return f() as F<any>;
37+
}

0 commit comments

Comments
 (0)