import type { Expand, UnionToIntersection } from ".."; export declare type Flatten = T extends object ? Expand : { [Q in `${Z}${P}`]: T[P]; } : never; }[keyof T & (T extends ReadonlyArray ? number : unknown)]>> : T; export declare type Unflatten = Expand | UnflattenIndirect>>>; declare type PrefixKeyof = { [P in keyof T]: P extends `${infer Q}.${string}` ? Q : never; }[keyof T]; declare type UnflattenDirect = { [P in keyof T]: P extends `${string}.${string}` ? never : { [Q in P]: T[P]; }; }[keyof T]; declare type UnflattenIndirect = Z extends Z ? { [P in Z]: Expand : never; }[keyof T]>>; } : never; /** * Turn an object into a single depth object. * @param object The original object. */ export declare function flatten(object: T): Flatten; /** * Revert a flattened object to a nested object. * @todo This currently doesn't deal with arrays. * @param object The flattened object. */ export declare function unflatten(object: T): Unflatten; export {};