export declare const InvalidArgumentsMessage = "Invalid arguments.";
export declare type Primitive = string | number | boolean;
export declare function isPrimitive(value: unknown): value is boolean | number | string;
export declare type Enumerate<N extends number, RESULT extends number[] = []> = RESULT["length"] extends N ? RESULT[number] : Enumerate<N, [...RESULT, RESULT["length"]]>;
export declare type Range<FROM extends number, TO extends number> = Exclude<Enumerate<TO>, Enumerate<FROM>>;
export declare type Depth = Enumerate<21>;
export declare type FlatArray<Arr, Depth extends number> = {
    done: Arr;
    recur: Arr extends ReadonlyArray<infer InnerArr> ? FlatArray<InnerArr, [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19][Depth]> : Arr;
}[Depth extends 0 ? "done" : "recur"];
export declare type Select<T, U> = T extends U ? [] : Extract<keyof T, "toString"> extends never ? [(value: T) => U] : [] | [(value: T) => U];
export declare type Comparer<T> = (left: T, right: T) => number;
export declare type OptionalComparer<T, U = T> = T extends Primitive ? [Comparer<U>?] : [Comparer<U>];
export declare type PromiseValue<T> = T extends Promise<infer U> ? U : T;
export declare type AsPromise<T> = T extends Promise<any> ? T : Promise<T>;
export declare type PromiseOrValue<T> = PromiseValue<T> | AsPromise<T>;
export declare type IterableValue<T> = T extends Iterable<infer U> ? U : T;
export declare type AnyIterableValue<T> = T extends Iterable<infer U> | AsyncIterable<infer U> ? U : T;
export declare const isIterable: (it: unknown) => boolean;
export declare function getNumericSelector<T>(value: T, ...select: T extends number ? [] : [(value: T) => number]): ((v: T) => number) | ((v: number) => number);
//# sourceMappingURL=helpers.d.ts.map