type PathDepth = 3; type Join = K extends string | number ? (P extends string | number ? `${K}.${P}` : never) : never; type NonFunctionKeys = { [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]; export type Paths = [Depth] extends [never] ? never : T extends object ? { [K in NonFunctionKeys]: K extends string | number ? T[K] extends (infer R)[] ? R extends object ? K | Join> : K : T[K] extends object ? K | Join> : K : never; }[NonFunctionKeys] : ""; type Prev = [never, 0, 1, 2, 3]; export type ArrayPaths = [Depth] extends [never] ? never : T extends object ? { [K in keyof T & (string | number)]: T[K] extends (infer R)[] ? `${K}` | `${K}.${ArrayPaths}` : T[K] extends object ? `${K}.${ArrayPaths}` : never; }[keyof T & (string | number)] : never; export {};