diff --git a/tests/cases/conformance/types/mapped/recursiveMappedTypes.ts b/tests/cases/conformance/types/mapped/recursiveMappedTypes.ts index 69a0c1ca597..d5a5d63515f 100644 --- a/tests/cases/conformance/types/mapped/recursiveMappedTypes.ts +++ b/tests/cases/conformance/types/mapped/recursiveMappedTypes.ts @@ -61,3 +61,21 @@ type Remap2 = T extends object ? { [P in keyof T]: Remap2; } : T; type a = Remap1; // string[] type b = Remap2; // string[] + +// Repro from #29992 + +type NonOptionalKeys = { [P in keyof T]: undefined extends T[P] ? never : P }[keyof T]; +type Child = { [P in NonOptionalKeys]: T[P] } + +export interface ListWidget { + "type": "list", + "minimum_count": number, + "maximum_count": number, + "collapsable"?: boolean, //default to false, means all expanded + "each": Child; +} + +type ListChild = Child + +declare let x: ListChild; +x.type;