declare type Undef = {
    '@Undefined$ymbol': true;
};
declare type Undef2 = {
    '@Undefined2$ymbol': true;
};
declare type NonUndef<T> = T extends Undef | Undef2 ? never : T;
declare type NonNil<T> = T extends null | undefined ? never : T;
declare type Converted<T> = {
    [P in keyof T]: Undef & Undef2 extends T[P] ? NonUndef<T[P]> | undefined : T[P];
};
declare type NonTraversable = string | number | bigint | boolean | symbol | Date;
declare type DeepPartial<T> = {
    [P in keyof T]?: T[P] extends Array<infer U> ? Array<DeepPartial<U>> : T[P] extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : DeepPartial<T[P]>;
};
declare type DefaultsDeep<T, U extends DeepPartial<T>> = {
    [P in keyof T]-?: NonNil<T[P]> extends NonTraversable ? null extends U[P] ? undefined extends U[P] ? undefined extends T[P] ? T[P] | Undef : T[P] : T[P] : undefined extends U[P] ? NonNil<T[P]> | Undef : NonNil<T[P]> : U[P] extends DeepPartial<T[P]> ? null extends U[P] ? undefined extends U[P] ? Converted<DefaultsDeep<T[P], NonNil<U[P]>>> | Undef2 : Converted<DefaultsDeep<T[P], NonNil<U[P]>>> : undefined extends U[P] ? Converted<NonNil<DefaultsDeep<T[P], NonNil<U[P]>>>> | Undef : Converted<NonNil<DefaultsDeep<T[P], NonNil<U[P]>>>> : undefined extends U[P] ? undefined extends T[P] ? T[P] | Undef : T[P] : T[P];
};
declare const defaultsDeep: <T, U extends DeepPartial<T>>(object: T, defaults: U) => Converted<DefaultsDeep<T, U>>;
export default defaultsDeep;
