export type Strategy = "override" | "merge"; export interface TightMap { [key: string]: TightMap | O; } export type DeepPartial = { [P in keyof T]?: T[P] extends object ? DeepPartial : T[P] extends string ? string : T[P]; } & { [key: string]: O | TightMap; }; export type NestedKeyOf> = { [Key in keyof ObjectType]: ObjectType[Key] extends Record ? NestedKeyOf : Key; }[keyof ObjectType]; type DeepKey = Keys extends [ infer First, ...infer Rest ] ? First extends keyof T ? Rest extends string[] ? DeepKey : never : never : T; export type ExtractDeepKey = DeepKey< T, Path > extends infer Result ? Result extends Record ? keyof Result : never : never; export type ExtractDeepObject = DeepKey< T, Path > extends infer Result ? Result extends Record ? Result : never : never;