@cookbook/dot-notation
Version:
Object readings and complex transformations using dot notation syntax.
7 lines (6 loc) • 720 B
TypeScript
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 };