DEV Community

Acid Coder
Acid Coder

Posted on

Typescript Flatten Object Type

type ToPaths<T, P extends string = ''> = T extends Record<number, unknown> ? { [K in keyof T]: ToPaths<T[K], `${P}${K & string}.`> }[keyof T] : { path: P extends `${infer P}.` ? P : never; type: T } type FromPaths<T extends { path: string; type: unknown }> = { [P in T['path']]: Extract<T, { path: P }>['type'] } type A = FromPaths<ToPaths<{ // ^? a: 1, b: { c: 2, d: Record<string, { e: 3, f: 4, }>, g: 5, }, h: { i: { j: 6, }, }, }>> 
Enter fullscreen mode Exit fullscreen mode

Image description
playground

Top comments (0)