export type IsObjectWithKeys<T> = T extends object ? keyof T : never;
export type IsObjectWithKeysReturnType<T, K, P> = T extends K ? P : never;
export type NestedKeys<T> = (T extends object ? {
    [K in keyof T & string]: `${K}` | (T[K] extends object ? `${K}.${NestedKeys<T[K]>}` : never);
}[keyof T & string] : never) extends infer D ? Extract<D, string> : never;
export type PathValue<T, P extends NestedKeys<T>> = P extends `${infer K}.${infer Rest}` ? K extends keyof T ? Rest extends NestedKeys<T[K]> ? PathValue<T[K], Rest> : never : never : P extends keyof T ? T[P] : never;
