Skip to content

Latest commit

 

History

History
34 lines (29 loc) · 1.14 KB

types-kit.internaldeepkeys.md

File metadata and controls

34 lines (29 loc) · 1.14 KB

Home > types-kit > InternalDeepKeys

InternalDeepKeys type

Signature:

type InternalDeepKeys<T, P extends string = ''> = keyof {
  [K in Keys<T> as K extends PathKey
    ? P extends ''
      ? T[K] extends infer V
        ? V extends V
          ? IsObject<V> extends true
            ? // we will get values like 0 and '0', but only need to recurse once
              K | (K extends number ? never : InternalDeepKeys<V, `${K}`>)
            : K
          : never
        : never
      : T[K] extends infer V
      ? V extends V
        ? IsObject<V> extends true
          ?
              | `${P}.${K}`
              | (K extends number ? never : InternalDeepKeys<V, `${P}.${K}`>)
          : `${P}.${K}`
        : never
      : never
    : never]: never
}

References: Keys, PathKey, IsObject, InternalDeepKeys