devtypes - v2.0.0
    Preparing search index...

    Type Alias DeepInject<T, D>

    DeepInject: Simplify<
        T extends (infer U)[]
            ? DeepInject<U, D>[]
            : T extends ReadonlyArray<infer U>
                ? ReadonlyArray<DeepInject<U, D>>
                : T extends object
                    ? {
                        [K in keyof T]: T[K] extends object ? DeepInject<T[K], D> : T[K]
                    } & {
                        [K in Exclude<
                            { [K in keyof D]-?: {} extends Pick<(...), (...)> ? K : never }[keyof D],
                            keyof T,
                        >]?: D[K]
                    } & {
                        [K in Exclude<
                            { [K in keyof D]-?: {} extends Pick<(...), (...)> ? never : K }[keyof D],
                            keyof T,
                        >]-?: D[K]
                    }
                    : T,
    >

    Deeply inject properties into an object tree.

    Type Parameters

    • T

      Target object type

    • D

      Injected type

    Injects properties from type D into every nested object within T. Handles arrays and readonly arrays by injecting into their element types.

    Properties in T are never overwritten by properties from D.

    type Nested = { level_1: { level_2: { } } };
    type Metadata = { metadata?: string };
    type DeepInjected = DeepInject< Nested, Metadata >;
    // { level_1: { level_2: { metadata?: string }, metadata?: string }, metadata?: string }