Skip to content
Typeutilsv0.8.17

DeepGet

Extracts the type of a nested property, distributing over unions. hasKeys narrows through this.

type DeepGet<Obj, Key extends string> = Obj extends unknown
    ? Key extends `${infer K}.${infer Rest}`
        ? K extends keyof Obj
            ? DeepGet<NonNullable<Obj[K]>, Rest>
            : never
        : Key extends keyof Obj
          ? Obj[Key]
          : never
    : never;

Obj

Obj