types-kit.internaldeepkeys.md

September 4, 2023 ยท View on GitHub

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