declare type ImmutablePrimitive = undefined | null | boolean | string | number | Function; declare type ImmutableMap = ReadonlyMap, Immutable>; declare type ImmutableSet = ReadonlySet>; declare type ImmutableObject = { readonly [K in keyof T]: Immutable; }; export declare type Immutable = T extends ImmutablePrimitive ? T : T extends Map ? ImmutableMap : T extends Set ? ImmutableSet : ImmutableObject; export {};