export type DeepPartial = { [K in keyof T]?: T[K] extends object ? DeepPartial : T[K]; }; type DotNotation = `${PREFIX}.${REST}`; export type DeepProperty = keyof T | { [K in keyof T]: T[K] extends object ? DotNotation> : never }[keyof T]; export type TypeOfDeepProperty> = K extends keyof T ? T[K] : K extends DotNotation ? PREFIX extends keyof T ? T[PREFIX] extends object ? REST extends DeepProperty ? TypeOfDeepProperty : never : never : never : never; export type DeepPropertyName = K extends DotNotation ? DeepPropertyName : K;