/**
 * @since 2.0.0-beta.3
 *
 * @packageDocumentation
 */
/*!
 * @maddimathon/utility-typescript@2.0.0-beta.5
 * @license MIT
 */
import type { Test } from '../../types/index.js';
/**
 * Deletes the properties of the given object whose types are undefined.
 *
 * @category Functions – Object
 *
 * @since 2.0.0-beta.3
 */
export declare function deleteUndefinedProps<T_Obj extends object>(obj: T_Obj): deleteUndefinedProps.OmitUndefined<T_Obj>;
/**
 * Utilities for the {@link deleteUndefinedProps} function.
 *
 * @category Functions – Object
 *
 * @since 2.0.0-beta.3
 */
export declare namespace deleteUndefinedProps {
    /**
     * Utility for {@link OmitUndefined} type.
     *
     * @since 2.0.0-beta.3
     * @internal
     */
    type KeysToKeep<T_Obj extends object> = ({
        [K in keyof T_Obj]: undefined extends T_Obj[K] ? never : K;
    } & {
        [key: number | string | symbol]: never;
    })[keyof T_Obj];
    /**
     * Utility for {@link OmitUndefined} type.
     *
     * @since 2.0.0-beta.3
     * @internal
     */
    type KeysToPartialize<T_Obj extends object> = ({
        [K in keyof T_Obj]: Test.Exactly<T_Obj[K], undefined> extends true ? never : undefined extends T_Obj[K] ? K : never;
    } & {
        [key: number | string | symbol]: never;
    })[keyof T_Obj];
    /**
     * @experimental
     */
    type OmitUndefined<T_Obj extends object> = {
        [K in KeysToKeep<T_Obj>]: T_Obj[K];
    } & {
        [K in KeysToPartialize<T_Obj>]?: Exclude<T_Obj[K], undefined>;
    };
}
