@@ -55,3 +55,113 @@ function foo(arg: Circular<tup>): tup {
55
55
>arg : Symbol(arg, Decl(recursiveMappedTypes.ts, 19, 13))
56
56
}
57
57
58
+ // Repro from #29442
59
+
60
+ type DeepMap<T extends unknown[], R> = {
61
+ >DeepMap : Symbol(DeepMap, Decl(recursiveMappedTypes.ts, 21, 1))
62
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 25, 13))
63
+ >R : Symbol(R, Decl(recursiveMappedTypes.ts, 25, 33))
64
+
65
+ [K in keyof T]: T[K] extends unknown[] ? DeepMap<T[K], R> : R;
66
+ >K : Symbol(K, Decl(recursiveMappedTypes.ts, 26, 3))
67
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 25, 13))
68
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 25, 13))
69
+ >K : Symbol(K, Decl(recursiveMappedTypes.ts, 26, 3))
70
+ >DeepMap : Symbol(DeepMap, Decl(recursiveMappedTypes.ts, 21, 1))
71
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 25, 13))
72
+ >K : Symbol(K, Decl(recursiveMappedTypes.ts, 26, 3))
73
+ >R : Symbol(R, Decl(recursiveMappedTypes.ts, 25, 33))
74
+ >R : Symbol(R, Decl(recursiveMappedTypes.ts, 25, 33))
75
+
76
+ };
77
+
78
+ type tpl = [string, [string, [string]]];
79
+ >tpl : Symbol(tpl, Decl(recursiveMappedTypes.ts, 27, 2))
80
+
81
+ type arr = string[][];
82
+ >arr : Symbol(arr, Decl(recursiveMappedTypes.ts, 29, 40))
83
+
84
+ type t1 = DeepMap<tpl, number>; // [number, [number, [number]]]
85
+ >t1 : Symbol(t1, Decl(recursiveMappedTypes.ts, 30, 22))
86
+ >DeepMap : Symbol(DeepMap, Decl(recursiveMappedTypes.ts, 21, 1))
87
+ >tpl : Symbol(tpl, Decl(recursiveMappedTypes.ts, 27, 2))
88
+
89
+ type t2 = DeepMap<arr, number>; // number[][]
90
+ >t2 : Symbol(t2, Decl(recursiveMappedTypes.ts, 32, 31))
91
+ >DeepMap : Symbol(DeepMap, Decl(recursiveMappedTypes.ts, 21, 1))
92
+ >arr : Symbol(arr, Decl(recursiveMappedTypes.ts, 29, 40))
93
+
94
+ // Repro from #29577
95
+
96
+ type Transform<T> = { [K in keyof T]: Transform<T[K]> };
97
+ >Transform : Symbol(Transform, Decl(recursiveMappedTypes.ts, 33, 31))
98
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 37, 15))
99
+ >K : Symbol(K, Decl(recursiveMappedTypes.ts, 37, 23))
100
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 37, 15))
101
+ >Transform : Symbol(Transform, Decl(recursiveMappedTypes.ts, 33, 31))
102
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 37, 15))
103
+ >K : Symbol(K, Decl(recursiveMappedTypes.ts, 37, 23))
104
+
105
+ interface User {
106
+ >User : Symbol(User, Decl(recursiveMappedTypes.ts, 37, 56))
107
+
108
+ avatar: string;
109
+ >avatar : Symbol(User.avatar, Decl(recursiveMappedTypes.ts, 39, 16))
110
+ }
111
+
112
+ interface Guest {
113
+ >Guest : Symbol(Guest, Decl(recursiveMappedTypes.ts, 41, 1))
114
+
115
+ displayName: string;
116
+ >displayName : Symbol(Guest.displayName, Decl(recursiveMappedTypes.ts, 43, 17))
117
+ }
118
+
119
+ interface Product {
120
+ >Product : Symbol(Product, Decl(recursiveMappedTypes.ts, 45, 1))
121
+
122
+ users: (User | Guest)[];
123
+ >users : Symbol(Product.users, Decl(recursiveMappedTypes.ts, 47, 19))
124
+ >User : Symbol(User, Decl(recursiveMappedTypes.ts, 37, 56))
125
+ >Guest : Symbol(Guest, Decl(recursiveMappedTypes.ts, 41, 1))
126
+ }
127
+
128
+ declare var product: Transform<Product>;
129
+ >product : Symbol(product, Decl(recursiveMappedTypes.ts, 51, 11))
130
+ >Transform : Symbol(Transform, Decl(recursiveMappedTypes.ts, 33, 31))
131
+ >Product : Symbol(Product, Decl(recursiveMappedTypes.ts, 45, 1))
132
+
133
+ product.users; // (Transform<User> | Transform<Guest>)[]
134
+ >product.users : Symbol(users, Decl(recursiveMappedTypes.ts, 47, 19))
135
+ >product : Symbol(product, Decl(recursiveMappedTypes.ts, 51, 11))
136
+ >users : Symbol(users, Decl(recursiveMappedTypes.ts, 47, 19))
137
+
138
+ // Repro from #29702
139
+
140
+ type Remap1<T> = { [P in keyof T]: Remap1<T[P]>; };
141
+ >Remap1 : Symbol(Remap1, Decl(recursiveMappedTypes.ts, 52, 14))
142
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 56, 12))
143
+ >P : Symbol(P, Decl(recursiveMappedTypes.ts, 56, 20))
144
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 56, 12))
145
+ >Remap1 : Symbol(Remap1, Decl(recursiveMappedTypes.ts, 52, 14))
146
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 56, 12))
147
+ >P : Symbol(P, Decl(recursiveMappedTypes.ts, 56, 20))
148
+
149
+ type Remap2<T> = T extends object ? { [P in keyof T]: Remap2<T[P]>; } : T;
150
+ >Remap2 : Symbol(Remap2, Decl(recursiveMappedTypes.ts, 56, 51))
151
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 57, 12))
152
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 57, 12))
153
+ >P : Symbol(P, Decl(recursiveMappedTypes.ts, 57, 39))
154
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 57, 12))
155
+ >Remap2 : Symbol(Remap2, Decl(recursiveMappedTypes.ts, 56, 51))
156
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 57, 12))
157
+ >P : Symbol(P, Decl(recursiveMappedTypes.ts, 57, 39))
158
+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 57, 12))
159
+
160
+ type a = Remap1<string[]>; // string[]
161
+ >a : Symbol(a, Decl(recursiveMappedTypes.ts, 57, 74))
162
+ >Remap1 : Symbol(Remap1, Decl(recursiveMappedTypes.ts, 52, 14))
163
+
164
+ type b = Remap2<string[]>; // string[]
165
+ >b : Symbol(b, Decl(recursiveMappedTypes.ts, 59, 26))
166
+ >Remap2 : Symbol(Remap2, Decl(recursiveMappedTypes.ts, 56, 51))
167
+
0 commit comments