export declare type Nullsy = null | undefined;
export declare type StringMap<T = string> = Record<string, T>;
export declare type KeyMap<K extends string, T = string> = Record<K, T>;
export declare type Diff<T extends string, U extends string> = ({
    [P in T]: P;
} & {
    [P in U]: never;
} & {
    [x: string]: never;
})[T];
export declare type Omit<T, K extends keyof T> = Pick<T, Diff<StringKeys<T>, Strings<K>>>;
export declare type PromisifiedObject<T extends object> = {
    [key in keyof T]: Promise<T[key]> | T[key];
};
export declare type StringKeys<T extends Record<string, any>> = Extract<keyof T, string>;
export declare type Strings<T> = Extract<T, string>;
export declare type DeepPartial<T extends object> = {
    [k in keyof T]?: T[k] extends Function ? T[k] : T[k] extends {} ? DeepPartial<T[k]> : T[k];
};
declare type DeepPartialNullsyValue<T> = T extends Function ? T : T extends {} ? DeepPartialNullsy<T> : T;
export declare type DeepPartialNullsy<T extends object> = {
    [k in keyof T]?: DeepPartialNullsyValue<T[k]> | undefined | null;
};
export declare type KeysOfValueType<TargetObject extends object, ValueType> = {
    [key in keyof TargetObject]: TargetObject[key] extends ValueType ? key : never;
}[keyof {
    [key in keyof TargetObject]: TargetObject[key] extends ValueType ? key : never;
}];
export declare type DeepReadonly<T> = T extends (infer R)[] ? DeepReadonlyArray<R> : T extends Function ? T : T extends object ? DeepReadonlyObject<T> : T;
interface DeepReadonlyArray<T> extends ReadonlyArray<DeepReadonly<T>> {
}
declare type DeepReadonlyObject<T> = {
    readonly [P in keyof T]: DeepReadonly<T[P]>;
};
export {};
