type AnyArray = Array | ReadonlyArray; type ObjectMapDeep = { [key in keyof Obj]: Obj[key] extends AnyArray ? Array> : Exclude extends object ? Obj[key] extends Exclude ? MapDeep : MapDeep | undefined : MappedType; }; export type MapDeep = Obj extends object ? ObjectMapDeep : Obj; export {};