declare function hasAny<T>(ary: T[]): ary is [T, ...T[]];
declare function hasAny<T>(ary: readonly T[]): ary is readonly [T, ...T[]];
declare function hasLength<T>(input: readonly T[], length: 0): input is [];
declare function hasLength<T>(input: readonly T[], length: 1): input is [T];
declare function hasLength<T>(input: readonly T[], length: 2): input is [T, T];
declare function hasLength<T>(input: readonly T[], length: 3): input is [T, T, T];
declare function hasLength<T>(input: readonly T[], length: 4): input is [T, T, T, T];
declare function hasLength<T>(input: readonly T[], length: 5): input is [T, T, T, T, T];
declare function first<T>(ary: readonly [T, ...T[]]): T;
declare function first<T>(ary: readonly [...T[], T]): T;
declare function first<T>(ary: readonly T[]): undefined | T;
declare function last<T>(ary: readonly [T, ...T[]]): T;
declare function last<T>(ary: readonly [...T[], T]): T;
declare function last<T>(ary: readonly T[]): undefined | T;
declare function concat<Ts extends any[]>(...inputArrays: Ts[]): Ts[number] extends (infer U)[] ? U[] : never;
declare function reduce<Ts extends readonly any[], U>(fn: (acc: U, item: Ts[number], index: number, items: Ts) => U, initialValue: U, inputArray: Ts): U;
declare function range(start: number, end: number): number[];
declare function reverse<T>(ary: T[]): T[];
declare function uniq<T>(ary: T[], iteratee?: (item: T) => any): T[];
declare function oneOf<T extends string[]>(...coll: T): (input: unknown) => input is T[number];
declare function oneOf<T extends any[]>(...coll: T): (input: unknown) => input is T[number];
type SortByIteratee<T> = (item: T, index: number, ary: T[]) => number | bigint;
/**
 * https://github.com/jashkenas/underscore/blob/1abc36c169947c54c97e266513b1d763d0198f46/modules/sortBy.js
 */
declare function sortBy<T>(iteratee: SortByIteratee<T> | SortByIteratee<T>[], ary: T[]): T[];
interface CurriedMapFindFn {
    <T, U>(fn: (input: T) => U | undefined, input: readonly T[]): U | undefined;
    <T, U>(fn: (input: T) => U | undefined): (input: readonly T[]) => U | undefined;
}
declare const mapFind: CurriedMapFindFn;
interface CurriedMapFindPFn {
    <T, U>(fn: (input: T) => Promise<U | undefined> | U | undefined, input: readonly T[]): Promise<U | undefined>;
    <T, U>(fn: (input: T) => Promise<U | undefined> | U | undefined): (input: readonly T[]) => Promise<U | undefined>;
}
declare const mapFindP: CurriedMapFindPFn;

export { type CurriedMapFindFn, type CurriedMapFindPFn, type SortByIteratee, concat, first, hasAny, hasLength, last, mapFind, mapFindP, oneOf, range, reduce, reverse, sortBy, uniq };
