declare type PromiseReturnType<T> = T extends Promise<infer Return> ? Return : T;
declare type FunctionReturnType<T> = T extends (...arguments_: any[]) => infer R ? PromiseReturnType<R> : T;
declare type ExcludeMethod<T> = Pick<T, {
    [K in keyof T]: T[K] extends (...arguments_: Array<(infer A)>) => unknown ? never : K;
}[keyof T]>;
declare type ObjectType<O = unknown, Keys extends keyof O = keyof O> = {
    [K in Keys]?: O[K];
};
declare type DeepPartial<T> = T extends {
    [K in keyof T]?: unknown;
} ? {
    [P in keyof T]?: DeepPartial<T[P]>;
} : T;
declare type DeepRequired<T> = T extends {
    [K in keyof T]: unknown;
} ? {
    [P in keyof T]: NonNullable<DeepRequired<T[P]>>;
} : NonNullable<T>;
declare type Collection<T> = ArrayLike<T> | readonly T[];
declare type CollectionItem<T> = T extends Collection<infer U> ? U : never;
declare type Many<T> = T | readonly T[];
declare type AnyObject = (Record<string, any>) & (Record<string, any> | object);
declare type AnyValue = AnyObject | string | number | boolean | symbol | bigint;

export { AnyObject, AnyValue, Collection, CollectionItem, DeepPartial, DeepRequired, ExcludeMethod, FunctionReturnType, Many, ObjectType, PromiseReturnType };
