Skip to content

Commit bee9f1a

Browse files
committed
Add regression tests
1 parent 9639434 commit bee9f1a

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

tests/cases/conformance/types/mapped/recursiveMappedTypes.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,42 @@ type tup = [number, number, number, number];
2222
function foo(arg: Circular<tup>): tup {
2323
return arg;
2424
}
25+
26+
// Repro from #29442
27+
28+
type DeepMap<T extends unknown[], R> = {
29+
[K in keyof T]: T[K] extends unknown[] ? DeepMap<T[K], R> : R;
30+
};
31+
32+
type tpl = [string, [string, [string]]];
33+
type arr = string[][];
34+
35+
type t1 = DeepMap<tpl, number>; // [number, [number, [number]]]
36+
type t2 = DeepMap<arr, number>; // number[][]
37+
38+
// Repro from #29577
39+
40+
type Transform<T> = { [K in keyof T]: Transform<T[K]> };
41+
42+
interface User {
43+
avatar: string;
44+
}
45+
46+
interface Guest {
47+
displayName: string;
48+
}
49+
50+
interface Product {
51+
users: (User | Guest)[];
52+
}
53+
54+
declare var product: Transform<Product>;
55+
product.users; // (Transform<User> | Transform<Guest>)[]
56+
57+
// Repro from #29702
58+
59+
type Remap1<T> = { [P in keyof T]: Remap1<T[P]>; };
60+
type Remap2<T> = T extends object ? { [P in keyof T]: Remap2<T[P]>; } : T;
61+
62+
type a = Remap1<string[]>; // string[]
63+
type b = Remap2<string[]>; // string[]

0 commit comments

Comments
 (0)