type PathDepth = [never, 0, 1, 2, ...0[]]; type Join = K extends string | number ? P extends string | number ? `${K}${"" extends P ? "" : "."}${P}` : never : never; // For performance, the maximum traversal depth is 10. export type PropertyPath = [D] extends [never] ? never : T extends object ? { [K in keyof T]-?: K extends string | number ? `${K}` | Join> : never; }[keyof T] : "";