declare type ImmutableArray = readonly Immutable[]; declare type ImmutableObject = { readonly [P in keyof T]: Immutable; }; export declare type Immutable = T extends (infer R)[] ? ImmutableArray : T extends Function ? T : T extends object ? ImmutableObject : T; export {};