@@ -165,3 +165,57 @@ type b = Remap2<string[]>; // string[]
165165>b : Symbol(b, Decl(recursiveMappedTypes.ts, 59, 26))
166166>Remap2 : Symbol(Remap2, Decl(recursiveMappedTypes.ts, 56, 51))
167167
168+ // Repro from #29992
169+
170+ type NonOptionalKeys<T> = { [P in keyof T]: undefined extends T[P] ? never : P }[keyof T];
171+ >NonOptionalKeys : Symbol(NonOptionalKeys, Decl(recursiveMappedTypes.ts, 60, 26))
172+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 64, 21))
173+ >P : Symbol(P, Decl(recursiveMappedTypes.ts, 64, 29))
174+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 64, 21))
175+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 64, 21))
176+ >P : Symbol(P, Decl(recursiveMappedTypes.ts, 64, 29))
177+ >P : Symbol(P, Decl(recursiveMappedTypes.ts, 64, 29))
178+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 64, 21))
179+
180+ type Child<T> = { [P in NonOptionalKeys<T>]: T[P] }
181+ >Child : Symbol(Child, Decl(recursiveMappedTypes.ts, 64, 90))
182+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 65, 11))
183+ >P : Symbol(P, Decl(recursiveMappedTypes.ts, 65, 19))
184+ >NonOptionalKeys : Symbol(NonOptionalKeys, Decl(recursiveMappedTypes.ts, 60, 26))
185+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 65, 11))
186+ >T : Symbol(T, Decl(recursiveMappedTypes.ts, 65, 11))
187+ >P : Symbol(P, Decl(recursiveMappedTypes.ts, 65, 19))
188+
189+ export interface ListWidget {
190+ >ListWidget : Symbol(ListWidget, Decl(recursiveMappedTypes.ts, 65, 51))
191+
192+ "type": "list",
193+ >"type" : Symbol(ListWidget["type"], Decl(recursiveMappedTypes.ts, 67, 29))
194+
195+ "minimum_count": number,
196+ >"minimum_count" : Symbol(ListWidget["minimum_count"], Decl(recursiveMappedTypes.ts, 68, 19))
197+
198+ "maximum_count": number,
199+ >"maximum_count" : Symbol(ListWidget["maximum_count"], Decl(recursiveMappedTypes.ts, 69, 28))
200+
201+ "collapsable"?: boolean, //default to false, means all expanded
202+ >"collapsable" : Symbol(ListWidget["collapsable"], Decl(recursiveMappedTypes.ts, 70, 28))
203+
204+ "each": Child<ListWidget>;
205+ >"each" : Symbol(ListWidget["each"], Decl(recursiveMappedTypes.ts, 71, 28))
206+ >Child : Symbol(Child, Decl(recursiveMappedTypes.ts, 64, 90))
207+ >ListWidget : Symbol(ListWidget, Decl(recursiveMappedTypes.ts, 65, 51))
208+ }
209+
210+ type ListChild = Child<ListWidget>
211+ >ListChild : Symbol(ListChild, Decl(recursiveMappedTypes.ts, 73, 1))
212+ >Child : Symbol(Child, Decl(recursiveMappedTypes.ts, 64, 90))
213+ >ListWidget : Symbol(ListWidget, Decl(recursiveMappedTypes.ts, 65, 51))
214+
215+ declare let x: ListChild;
216+ >x : Symbol(x, Decl(recursiveMappedTypes.ts, 77, 11))
217+ >ListChild : Symbol(ListChild, Decl(recursiveMappedTypes.ts, 73, 1))
218+
219+ x.type;
220+ >x : Symbol(x, Decl(recursiveMappedTypes.ts, 77, 11))
221+
0 commit comments