diff --git a/tests/cases/conformance/types/mapped/recursiveMappedTypes.ts b/tests/cases/conformance/types/mapped/recursiveMappedTypes.ts index 188efa2f51a..69a0c1ca597 100644 --- a/tests/cases/conformance/types/mapped/recursiveMappedTypes.ts +++ b/tests/cases/conformance/types/mapped/recursiveMappedTypes.ts @@ -22,3 +22,42 @@ type tup = [number, number, number, number]; function foo(arg: Circular): tup { return arg; } + +// Repro from #29442 + +type DeepMap = { + [K in keyof T]: T[K] extends unknown[] ? DeepMap : R; +}; + +type tpl = [string, [string, [string]]]; +type arr = string[][]; + +type t1 = DeepMap; // [number, [number, [number]]] +type t2 = DeepMap; // number[][] + +// Repro from #29577 + +type Transform = { [K in keyof T]: Transform }; + +interface User { + avatar: string; +} + +interface Guest { + displayName: string; +} + +interface Product { + users: (User | Guest)[]; +} + +declare var product: Transform; +product.users; // (Transform | Transform)[] + +// Repro from #29702 + +type Remap1 = { [P in keyof T]: Remap1; }; +type Remap2 = T extends object ? { [P in keyof T]: Remap2; } : T; + +type a = Remap1; // string[] +type b = Remap2; // string[]