• Type Parameters

    • T extends object
    • TReadonly extends boolean = true

    Parameters

    • obj: T
    • Optionaloptions: { readonlyType: TReadonly }

    Returns TReadonly extends true
        ? Readonly<
            {
                [K in string
                | number
                | symbol]: T[K] extends object
                    ? Readonly<
                        {
                            [K in string
                            | number
                            | symbol]: any[any][K] extends object
                                ? Readonly<
                                    {
                                        [K in string
                                        | number
                                        | symbol]: (...)[(...)] extends object
                                            ? Readonly<(...)>
                                            : (...)[(...)]
                                    },
                                >
                                : any[any][K]
                        },
                    >
                    : T[K]
            },
        >
        : T