UNPKG

@cookbook/dot-notation

Version:

Object readings and complex transformations using dot notation syntax.

7 lines (6 loc) 720 B
declare type ArrayDotNotation<T> = T extends Array<infer U> ? `[${number}]${ArrayDotNotation<U>}` : T extends Record<string, unknown> ? `.${DotNotationPathOf<T>}` : never; declare type DotNotationPathOf<T extends object> = { [K in keyof T & string]: T[K] extends Array<infer U> ? K | `${K}[${number}]` | `${K}[${number}]${ArrayDotNotation<U>}` : T[K] extends Record<string, unknown> ? `${K}` | `${K}.${DotNotationPathOf<T[K]>}` : K; }[keyof T & string]; declare type DotNotationDataTypeOf<T extends object, P extends DotNotationPathOf<T> | string> = P extends `${infer K}.${infer R}` ? DotNotationDataTypeOf<T[K], R> : P extends `${infer K}` ? T[K] : never; export type { DotNotationPathOf, DotNotationDataTypeOf };