diff --git a/src/internal/types.ts b/src/internal/types.ts index 944b83a..8f3cd75 100644 --- a/src/internal/types.ts +++ b/src/internal/types.ts @@ -19,11 +19,29 @@ export type Themes = { }; type FlatKeys = keyof T; -type DotPaths = { - [K in keyof T & string]: T[K] extends object - ? K | `${K}.${DotPaths}` // Note: resolving `never` will collapse the entire interpolated string to never, leaving only valid paths - : K; -}[keyof T & string]; + +type NonTraversable = + | ((...args: never) => unknown) + | Array + | Date + | RegExp + | Map + | Set + | Promise; +type Prev = [never, 0, 1, 2, 3, 4]; + +type DotPaths = Depth extends 0 + ? never + : + | { + [K in keyof T & string]: T[K] extends object + ? T[K] extends NonTraversable + ? never + : `${K}.${DotPaths}` // Note: resolving `never` will collapse the entire interpolated string to never, leaving only valid paths + : never; + }[keyof T & string] + | (keyof T & string); + type NestedKeys = Exclude, FlatKeys>; /**