PropertyNamesInner: T extends object
    ? {
        [K in U & keyof T]: T[K] extends Date
        | undefined
            ? K
            : T[K] extends (infer A)[]
            | undefined
                ? K | PropertyNamesInner<A>
                : K | PropertyNamesInner<T[K]>
    }[U & keyof T]
    : never

Type Parameters

  • T
  • U = keyof T