/**
 * Deep-Readonly type (recursive)
 *
 * From: https://stackoverflow.com/questions/41879327/deepreadonly-object-typescript/49670389
 */
export declare type DeepReadonly<T> = T extends (infer R)[] ? DeepReadonlyArray<R> : T extends Function ? T : T extends object ? DeepReadonlyObject<T> : T;
export declare type Immute<T> = DeepReadonly<T>;
export interface DeepReadonlyArray<T> extends ReadonlyArray<DeepReadonly<T>> {
}
export declare type DeepReadonlyObject<T> = {
    readonly [P in keyof T]: DeepReadonly<T[P]>;
};
/**
 * Make deep-readonly object
 *
 * From: https://stackoverflow.com/questions/41299642/how-to-use-javascript-proxy-for-nested-objects
 */
export declare function asReadonly<T extends object>(obj: T): DeepReadonly<T>;
