import { NiceMerge } from './generics';
import { TObject } from './tsSchema';
export declare const tObject_omit: <TObj extends TObject, PropsToOmit extends (keyof TObj["properties"])[], NewProperties = Omit<TObj["properties"], PropsToOmit[number]> extends infer T ? { [K in keyof T]: Omit<TObj["properties"], PropsToOmit[number]>[K]; } : never, Out = Omit<TObj, "properties"> & {
    properties: NewProperties;
} extends infer T_1 ? { [K_1 in keyof T_1]: (Omit<TObj, "properties"> & {
    properties: NewProperties;
})[K_1]; } : never>(obj: TObj, ...attrsName: PropsToOmit) => Out;
export declare const tObject_pick: <TObj extends TObject, PropsToPick extends (keyof TObj["properties"])[], NewProperties = Pick<TObj["properties"], PropsToPick[number]> extends infer T ? { [K in keyof T]: Pick<TObj["properties"], PropsToPick[number]>[K]; } : never, Out = Omit<TObj, "properties"> & {
    properties: NewProperties;
} extends infer T_1 ? { [K_1 in keyof T_1]: (Omit<TObj, "properties"> & {
    properties: NewProperties;
})[K_1]; } : never>(obj: TObj, ...attrsName: PropsToPick) => Out;
export declare const tObject_partial: <TObj extends TObject>(obj: TObj) => Omit<TObj, "properties"> & {
    properties: { [K_1 in keyof TObj["properties"]]: Omit<TObj["properties"][K_1], "required"> & {
        required: false;
    } extends infer T_1 ? { [K_2 in keyof T_1]: (Omit<TObj["properties"][K_1], "required"> & {
        required: false;
    })[K_2]; } : never; };
} extends infer T ? { [K in keyof T]: (Omit<TObj, "properties"> & {
    properties: { [K_1 in keyof TObj["properties"]]: Omit<TObj["properties"][K_1], "required"> & {
        required: false;
    } extends infer T_1 ? { [K_2 in keyof T_1]: (Omit<TObj["properties"][K_1], "required"> & {
        required: false;
    })[K_2]; } : never; };
})[K]; } : never;
export declare const tUnionObject: <T extends string, U>(type: T, attrs: U) => {
    properties: {
        type: {
            type: "enum";
            options: [import("./generics").DeepWriteable<T>];
            required: true;
        };
    } & U;
    type: "object";
    required: true;
};
export declare const tUtils: {
    unionObject: <T extends string, U>(type: T, attrs: U) => {
        properties: {
            type: {
                type: "enum";
                options: [import("./generics").DeepWriteable<T>];
                required: true;
            };
        } & U;
        type: "object";
        required: true;
    };
    tObject: {
        pick: <TObj extends TObject, PropsToPick extends (keyof TObj["properties"])[], NewProperties = Pick<TObj["properties"], PropsToPick[number]> extends infer T_1 ? { [K in keyof T_1]: Pick<TObj["properties"], PropsToPick[number]>[K]; } : never, Out = Omit<TObj, "properties"> & {
            properties: NewProperties;
        } extends infer T_2 ? { [K_1 in keyof T_2]: (Omit<TObj, "properties"> & {
            properties: NewProperties;
        })[K_1]; } : never>(obj: TObj, ...attrsName: PropsToPick) => Out;
        omit: <TObj_1 extends TObject, PropsToOmit extends (keyof TObj_1["properties"])[], NewProperties_1 = Omit<TObj_1["properties"], PropsToOmit[number]> extends infer T_3 ? { [K_2 in keyof T_3]: Omit<TObj_1["properties"], PropsToOmit[number]>[K_2]; } : never, Out_1 = Omit<TObj_1, "properties"> & {
            properties: NewProperties_1;
        } extends infer T_4 ? { [K_3 in keyof T_4]: (Omit<TObj_1, "properties"> & {
            properties: NewProperties_1;
        })[K_3]; } : never>(obj: TObj_1, ...attrsName: PropsToOmit) => Out_1;
        partial: <TObj_2 extends TObject>(obj: TObj_2) => Omit<TObj_2, "properties"> & {
            properties: { [K_5 in keyof TObj_2["properties"]]: Omit<TObj_2["properties"][K_5], "required"> & {
                required: false;
            } extends infer T_7 ? { [K_6 in keyof T_7]: (Omit<TObj_2["properties"][K_5], "required"> & {
                required: false;
            })[K_6]; } : never; };
        } extends infer T_5 ? { [K_4 in keyof T_5]: (Omit<TObj_2, "properties"> & {
            properties: { [K_5 in keyof TObj_2["properties"]]: Omit<TObj_2["properties"][K_5], "required"> & {
                required: false;
            } extends infer T_6 ? { [K_6 in keyof T_6]: (Omit<TObj_2["properties"][K_5], "required"> & {
                required: false;
            })[K_6]; } : never; };
        })[K_4]; } : never;
    };
};
