devtypes - v1.1.0
    Preparing search index...

    Type Alias DeepInject<T, D>

    DeepInject: 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<D, K> ? K : never }[keyof D],
                        keyof T,
                    >]?: D[K]
                } & {
                    [K in Exclude<
                        { [K in keyof D]-?: {} extends Pick<D, K> ? 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

    1.1.0

    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 DeepIntersected = DeepIntersection< Nested, Metadata >;
    // { level_1: { level_2: { metadata?: string }, metadata?: string }, metadata?: string }