export type RequireAtLeastOne = Pick> & { [K in Keys]-?: Required> & Partial>>; }[Keys]; export type RequireOnlyOne = Pick> & { [K in Keys]-?: Required> & Partial, undefined>>; }[Keys]; type Prev = [never, 0, 1, 2, 3, 4, 5, ...0[]]; type Join = K extends string | number ? P extends string | number ? `${K}${"" extends P ? "" : "."}${P}` : never : never; export type KeyOfNestedObject = [D] extends [never] ? never : T extends object ? { [K in keyof T]: T[K] extends Array ? K extends string ? `${K}` : "" : Join>; }[keyof T] : ""; export type KeyOfNestedObjectWithoutArray = [ D ] extends [never] ? never : T extends object ? { [K in keyof T]: Join>; }[keyof T] : ""; export type NestedObjectPaths = [D] extends [never] ? never : T extends object ? { [K in keyof T]-?: K extends string | number ? `${K}` | Join> : never; }[keyof T] : ""; export {};