ts-type-forge
    Preparing search index...

    Type Alias DeepReadonly<T>

    DeepReadonly: T extends Primitive
        ? T
        : T extends AnyFn
            ? T
            : T extends MutableMap<infer K, infer V>
                ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>>
                : T extends ReadonlyMap<infer K, infer V>
                    ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>>
                    : T extends MutableSet<infer V>
                        ? ReadonlySet<DeepReadonly<V>>
                        : T extends ReadonlySet<infer V>
                            ? ReadonlySet<DeepReadonly<V>>
                            : T extends Record<string, any>
                            | readonly unknown[]
                                ? { readonly [K in keyof T]: DeepReadonly<T[K]> }
                                : T

    Recursively applies the readonly modifier to all properties of an object, array, Map, or Set. Primitives and functions are returned as is.

    Type Parameters

    • T

      The type to make deeply readonly.

    A new type with all nested properties marked as readonly.

    type Data = { a: number; b: { c: string[]; d: Map<number, boolean> } };
    type ReadonlyData = DeepReadonly<Data>;
    // Result: {
    // readonly a: number;
    // readonly b: {
    // readonly c: readonly string[];
    // readonly d: ReadonlyMap<number, boolean>;
    // };
    // }