@softwareventures/array
Version:
Pure functional array manipulation and traversal
248 lines (247 loc) • 24.9 kB
TypeScript
import type { Comparator } from "@softwareventures/ordered";
export declare function copy<T>(array: ArrayLike<T>): T[];
export declare function isArray(value: unknown): value is readonly unknown[];
export declare function isArrayLike(value: unknown): value is ArrayLike<unknown>;
export declare function coerce<T>(array: ArrayLike<T>): readonly T[];
export declare function first<T>(array: ArrayLike<T>): T | null;
export declare function tail<T>(array: ArrayLike<T>): T[];
export declare function push<T>(array: ArrayLike<T>, value: T): T[];
export declare function pushFn<T>(value: T): (array: ArrayLike<T>) => T[];
export declare function unshift<T>(array: ArrayLike<T>, value: T): T[];
export declare function unshiftFn<T>(value: T): (array: ArrayLike<T>) => T[];
export declare function initial<T>(array: ArrayLike<T>): T[];
export declare function last<T>(array: ArrayLike<T>): T | null;
/** If the array contains exactly one element, returns that element.
* Otherwise, returns null. */
export declare function only<T>(array: ArrayLike<T>): T | null;
export declare function empty<T>(array: ArrayLike<T>): boolean;
export declare function notEmpty<T>(array: ArrayLike<T>): boolean;
export declare function reverse<T>(array: ArrayLike<T>): T[];
export declare function slice<T>(array: ArrayLike<T>, start?: number, end?: number): T[];
export declare function sliceFn<T>(start?: number, end?: number): (array: ArrayLike<T>) => T[];
export declare function take<T>(array: ArrayLike<T>, count: number): T[];
export declare function takeFn<T>(count: number): (array: ArrayLike<T>) => T[];
export declare function drop<T>(array: ArrayLike<T>, count: number): T[];
export declare function dropFn<T>(count: number): (array: ArrayLike<T>) => T[];
export declare function takeWhile<T, U extends T>(array: ArrayLike<T>, predicate: (element: T, index: number) => element is U): U[];
export declare function takeWhile<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
export declare function takeWhileFn<T, U extends T>(predicate: (element: T, index: number) => element is U): (array: ArrayLike<T>) => U[];
export declare function takeWhileFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
export declare function takeUntil<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
export declare function takeUntilFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
export declare function dropWhile<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
export declare function dropWhileFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
export declare function dropUntil<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
export declare function dropUntilFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
export declare function equal<T>(a: ArrayLike<T>, b: ArrayLike<T>, elementsEqual?: (a: T, b: T) => boolean): boolean;
export declare function equalFn<T>(b: ArrayLike<T>, elementsEqual?: (a: T, b: T) => boolean): (a: ArrayLike<T>) => boolean;
export declare function notEqual<T>(a: ArrayLike<T>, b: ArrayLike<T>, elementsEqual?: (a: T, b: T) => boolean): boolean;
export declare function notEqualFn<T>(b: ArrayLike<T>, elementsEqual?: (a: T, b: T) => boolean): (a: ArrayLike<T>) => boolean;
export declare function prefixMatch<T>(a: ArrayLike<T>, b: ArrayLike<T>, elementsEqual?: (a: T, b: T) => boolean): boolean;
export declare function prefixMatchFn<T>(b: ArrayLike<T>, elementsEqual?: (a: T, b: T) => boolean): (a: ArrayLike<T>) => boolean;
export declare function map<T, U>(array: ArrayLike<T>, f: (element: T, index: number) => U): U[];
export declare function mapFn<T, U>(f: (element: T, index: number) => U): (array: ArrayLike<T>) => U[];
export declare function filter<T, U extends T>(array: ArrayLike<T>, predicate: (element: T, index: number) => element is U): U[];
export declare function filter<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
export declare function filterFn<T, U extends T>(predicate: (element: T, index: number) => element is U): (array: ArrayLike<T>) => U[];
export declare function filterFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
export declare function exclude<T, U>(array: ArrayLike<T | U>, predicate: (element: T | U) => element is T): U[];
export declare function exclude<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
export declare function excludeFn<T, U>(predicate: (element: T | U) => element is T): (array: ArrayLike<T | U>) => T[];
export declare function excludeFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
export declare function excludeNull<T>(array: ArrayLike<T | null | undefined>): T[];
export declare function excludeFirst<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T[];
export declare function excludeFirstFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T[];
export declare function remove<T>(array: ArrayLike<T>, value: T): T[];
export declare function removeFn<T>(value: T): (array: ArrayLike<T>) => T[];
export declare function removeFirst<T>(array: ArrayLike<T>, value: T): T[];
export declare function removeFirstFn<T>(value: T): (array: ArrayLike<T>) => T[];
export declare function fold<T, U>(array: ArrayLike<T>, f: (accumulator: U, element: T, index: number) => U, initial: U): U;
export declare function foldFn<T, U>(f: (accumulator: U, element: T, index: number) => U, initial: U): (array: ArrayLike<T>) => U;
export declare function fold1<T>(array: ArrayLike<T>, f: (accumulator: T, element: T, index: number) => T): T;
export declare function fold1Fn<T>(f: (accumulator: T, element: T, index: number) => T): (array: ArrayLike<T>) => T;
export declare function foldRight<T, U>(array: ArrayLike<T>, f: (accumulator: U, element: T, index: number) => U, initial: U): U;
export declare function foldRightFn<T, U>(f: (accumulator: U, element: T, index: number) => U, initial: U): (array: ArrayLike<T>) => U;
export declare function foldRight1<T>(array: ArrayLike<T>, f: (accumulator: T, element: T, index: number) => T): T;
export declare function foldRight1Fn<T>(f: (accumulator: T, element: T, index: number) => T): (array: ArrayLike<T>) => T;
export declare function foldMap<T, U>(array: ArrayLike<T>, f: (accumulator: U, element: U, index: number) => U, m: (element: T, index: number) => U, initial: U): U;
export declare function foldMapFn<T, U>(f: (accumulator: U, element: U, index: number) => U, m: (element: T, index: number) => U, initial: U): (array: ArrayLike<T>) => U;
export declare function foldMapRight<T, U>(array: ArrayLike<T>, f: (accumulator: U, element: U, index: number) => U, m: (element: T, index: number) => U, initial: U): U;
export declare function foldMapRightFn<T, U>(f: (accumulator: U, element: U, index: number) => U, m: (element: T, index: number) => U, initial: U): (array: ArrayLike<T>) => U;
export declare function contains<T>(array: ArrayLike<T>, value: T): boolean;
export declare function containsFn<T>(value: T): (array: ArrayLike<T>) => boolean;
export declare function indexOf<T>(array: ArrayLike<T>, value: T): number | null;
export declare function indexOfFn<T>(value: T): (array: ArrayLike<T>) => number | null;
export declare function lastIndexOf<T>(array: ArrayLike<T>, value: T): number | null;
export declare function lastIndexOfFn<T>(value: T): (array: ArrayLike<T>) => number | null;
export declare function findIndex<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): number | null;
export declare function findIndexFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => number | null;
export declare function findLastIndex<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): number | null;
export declare function findLastIndexFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => number | null;
export declare function find<T, U extends T>(array: ArrayLike<T>, predicate: (element: T) => element is U): U | null;
export declare function find<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T | null;
export declare function findFn<T, U extends T>(predicate: (element: T) => element is U): (array: ArrayLike<T>) => U | null;
export declare function findFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T | null;
export declare function findLast<T, U extends T>(array: ArrayLike<T>, predicate: (element: T) => element is U): U | null;
export declare function findLast<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): T | null;
export declare function findLastFn<T, U extends T>(predicate: (element: T) => element is U): (array: ArrayLike<T>) => U | null;
export declare function findLastFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => T | null;
export declare function maximum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;
export declare function maximum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;
export declare function maximumFn<T extends string | number | boolean>(): (array: ArrayLike<T>) => T | null;
export declare function maximumFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T | null;
export declare function maximumBy<T>(array: ArrayLike<T>, select: (element: T) => number): T | null;
export declare function maximumByFn<T>(select: (element: T) => number): (array: ArrayLike<T>) => T | null;
export declare function minimum<T extends string | number | boolean>(array: ArrayLike<T>): T | null;
export declare function minimum<T>(array: ArrayLike<T>, compare: Comparator<T>): T | null;
export declare function minimumFn<T extends string | number | boolean>(): (array: ArrayLike<T>) => T | null;
export declare function minimumFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T | null;
export declare function minimumBy<T>(array: ArrayLike<T>, select: (element: T) => number): T | null;
export declare function minimumByFn<T>(select: (element: T) => number): (array: ArrayLike<T>) => T | null;
export declare function sum(array: ArrayLike<number>): number;
export declare function product(array: ArrayLike<number>): number;
export declare function average(array: ArrayLike<number>): number | null;
export declare function and(array: ArrayLike<boolean>): boolean;
export declare function or(array: ArrayLike<boolean>): boolean;
export declare function any<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): boolean;
export declare function anyFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => boolean;
export declare function all<T, U extends T>(array: readonly T[], predicate: (element: T, index: number) => element is U): array is readonly U[];
export declare function all<T, U extends T>(array: ArrayLike<T>, predicate: (element: T, index: number) => element is U): array is ArrayLike<U>;
export declare function all<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): boolean;
export declare function allFn<T, U extends T>(predicate: (element: T, index: number) => element is U): (array: ArrayLike<T>) => array is ArrayLike<U>;
export declare function allFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => boolean;
export declare function concat<T>(arrays: ArrayLike<ArrayLike<T>>): T[];
export declare function prepend<T>(a: ArrayLike<T>): (b: ArrayLike<T>) => T[];
export declare function append<T>(b: ArrayLike<T>): (a: ArrayLike<T>) => T[];
export declare function concatMap<T, U>(array: ArrayLike<T>, f: (element: T, index: number) => ArrayLike<U>): U[];
export declare function concatMapFn<T, U>(f: (element: T, index: number) => ArrayLike<U>): (array: ArrayLike<T>) => U[];
export type NoneNull<T extends ArrayLike<unknown>> = {
[K in keyof T]: NonNullable<T[K]>;
};
export declare function noneNull<T extends ArrayLike<unknown>>(array: T): NoneNull<T> | null;
export declare function scan<T, U>(array: ArrayLike<T>, f: (accumulator: U, element: T, index: number) => U, initial: U): U[];
export declare function scanFn<T, U>(f: (accumulator: U, element: T, index: number) => U, initial: U): (array: ArrayLike<T>) => U[];
export declare function scan1<T>(array: ArrayLike<T>, f: (accumulator: T, element: T, index: number) => T): T[];
export declare function scan1Fn<T>(f: (accumulator: T, element: T, index: number) => T): (array: ArrayLike<T>) => T[];
export declare function scanRight<T, U>(array: ArrayLike<T>, f: (accumulator: U, element: T, index: number) => U, initial: U): U[];
export declare function scanRightFn<T, U>(f: (accumulator: U, element: T, index: number) => U, initial: U): (array: ArrayLike<T>) => U[];
export declare function scanRight1<T>(array: ArrayLike<T>, f: (accumulator: T, element: T, index: number) => T): T[];
export declare function scanRight1Fn<T>(f: (accumulator: T, element: T, index: number) => T): (array: ArrayLike<T>) => T[];
/** Splits the array at the specified index.
*
* Returns a tuple where the first element is the first `index` elements of the
* array, and the second element is the remaining elements of the array. */
export declare function split<T>(array: readonly T[], index: number): [T[], T[]];
/** Returns a function that splits an array at the specified index.
*
* This is the curried form of {@link split}. */
export declare function splitFn<T>(index: number): (array: readonly T[]) => [T[], T[]];
export declare function partition<T, U extends T>(array: ArrayLike<T>, predicate: (element: T) => element is U): [U[], Array<Exclude<T, U>>];
export declare function partition<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): [T[], T[]];
export declare function partitionFn<T, U extends T>(predicate: (element: T) => element is U): (array: ArrayLike<T>) => [U[], Array<Exclude<T, U>>];
export declare function partitionFn<T>(predicate: (element: T, index: number) => boolean): (array: ArrayLike<T>) => [T[], T[]];
export declare function partitionWhile<T, U extends T>(array: ArrayLike<T>, predicate: (element: T) => element is U): [U[], T[]];
export declare function partitionWhile<T>(array: ArrayLike<T>, predicate: (element: T, index: number) => boolean): [T[], T[]];
export declare function partitionWhileFn<T, U extends T>(predicate: (element: T) => element is U): (array: readonly T[]) => [U[], T[]];
export declare function partitionWhileFn<T>(predicate: (element: T) => boolean): (array: readonly T[]) => [T[], T[]];
export declare function partitionUntil<T>(array: ArrayLike<T>, predicate: (element: T) => boolean): [T[], T[]];
export declare function partitionUntilFn<T>(predicate: (element: T) => boolean): (array: ArrayLike<T>) => [T[], T[]];
/** Takes two arrays and returns an array of corresponding pairs.
*
* If one of the supplied arrays is shorter than the other, then the excess
* elements of the longer array will be discarded. */
export declare function zip<T, U>(a: readonly T[], b: readonly U[]): Array<[T, U]>;
/** Returns a function that combines the elements of `a` with the elements of
* `b` and returns an array of corresponding pairs.
*
* If one of the supplied arrays is shorter than the other, then the excess
* elements of the longer array will be discarded.
*
* This is the curried variant of {@link zip}. */
export declare function zipFn<T, U>(b: readonly U[]): (a: readonly T[]) => Array<[T, U]>;
export declare function keyBy<TKey, TElement>(array: ArrayLike<TElement>, f: (element: TElement, index: number) => TKey): Map<TKey, TElement[]>;
export declare function keyByFn<TKey, TElement>(f: (element: TElement, index: number) => TKey): (array: ArrayLike<TElement>) => Map<TKey, TElement[]>;
export declare function keyFirstBy<TKey, TElement>(array: ArrayLike<TElement>, f: (element: TElement, index: number) => TKey): Map<TKey, TElement>;
export declare function keyFirstByFn<TKey, TElement>(f: (element: TElement, index: number) => TKey): (array: ArrayLike<TElement>) => Map<TKey, TElement>;
export declare function keyLastBy<TKey, TElement>(array: ArrayLike<TElement>, f: (element: TElement, index: number) => TKey): Map<TKey, TElement>;
export declare function keyLastByFn<TKey, TElement>(f: (element: TElement, index: number) => TKey): (array: ArrayLike<TElement>) => Map<TKey, TElement>;
export declare function mapKeyBy<TKey, TElement, TNewElement>(array: ArrayLike<TElement>, f: (element: TElement, index: number) => readonly [TKey, TNewElement]): Map<TKey, TNewElement[]>;
export declare function mapKeyByFn<TKey, TElement, TNewElement>(f: (element: TElement, index: number) => readonly [TKey, TNewElement]): (array: ArrayLike<TElement>) => Map<TKey, TNewElement[]>;
export declare function mapKeyFirstBy<TKey, TElement, TNewElement>(array: ArrayLike<TElement>, f: (element: TElement, index: number) => readonly [TKey, TNewElement]): Map<TKey, TNewElement>;
export declare function mapKeyFirstByFn<TKey, TElement, TNewElement>(f: (element: TElement, index: number) => readonly [TKey, TNewElement]): (array: ArrayLike<TElement>) => Map<TKey, TNewElement>;
export declare function mapKeyLastBy<TKey, TElement, TNewElement>(array: ArrayLike<TElement>, f: (element: TElement, index: number) => readonly [TKey, TNewElement]): Map<TKey, TNewElement>;
export declare function mapKeyLastByFn<TKey, TElement, TNewElement>(f: (element: TElement, index: number) => readonly [TKey, TNewElement]): (array: ArrayLike<TElement>) => Map<TKey, TNewElement>;
export interface IdentityGrouping<T> {
readonly identity: (element: T) => unknown;
}
export interface EqualityGrouping<T> {
readonly equal: (a: T, b: T) => boolean;
readonly hash?: (element: T, index: number) => unknown;
}
export interface OrderedGrouping<T> {
readonly compare: Comparator<T>;
readonly hash?: (element: T, index: number) => unknown;
}
export interface HashGrouping<T> {
readonly hash: (element: T, index: number) => unknown;
}
export type Grouping<T> = IdentityGrouping<T> | EqualityGrouping<T> | OrderedGrouping<T> | HashGrouping<T>;
export declare function group<T>(array: ArrayLike<T>, grouping: Grouping<T>): T[][];
export declare function groupFn<T>(grouping: Grouping<T>): (array: ArrayLike<T>) => T[][];
export declare function groupByIdentity<T>(array: ArrayLike<T>, identity?: (element: T) => unknown): T[][];
export declare function groupByIdentityFn<T>(identity: (element: T) => unknown): (array: ArrayLike<T>) => T[][];
export declare function groupByEquality<T>(array: ArrayLike<T>, equal: (a: T, b: T) => boolean): T[][];
export declare function groupByEqualityFn<T>(equal: (a: T, b: T) => boolean): (array: ArrayLike<T>) => T[][];
export declare function groupByOrder<T>(array: ArrayLike<T>, compare: Comparator<T>): T[][];
export declare function groupByOrderFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[][];
export declare function groupByHash<T>(array: ArrayLike<T>, hash: (element: T, index: number) => unknown): T[][];
export declare function groupByHashFn<T>(hash: (element: T, index: number) => unknown): (array: ArrayLike<T>) => T[][];
export declare function groupByEqualityWithHash<T>(array: ArrayLike<T>, equal: (a: T, b: T) => boolean, hash: (element: T, index: number) => unknown): T[][];
export declare function groupByEqualityWithHashFn<T>(equal: (a: T, b: T) => boolean, hash: (element: T, index: number) => unknown): (array: ArrayLike<T>) => T[][];
export declare function groupByOrderWithHash<T>(array: ArrayLike<T>, compare: Comparator<T>, hash: (element: T, index: number) => unknown): T[][];
export declare function groupByOrderWithHashFn<T>(compare: Comparator<T>, hash: (element: T, index: number) => unknown): (array: ArrayLike<T>) => T[][];
export declare function groupAdjacent<T>(array: ArrayLike<T>, grouping: Grouping<T>): T[][];
export declare function groupAdjacentFn<T>(grouping: Grouping<T>): (array: ArrayLike<T>) => T[][];
export declare function groupAdjacentByIdentity<T>(array: ArrayLike<T>, identity?: (element: T) => unknown): T[][];
export declare function groupAdjacentByIdentityFn<T>(identity: (element: T) => unknown): (array: ArrayLike<T>) => T[][];
export declare function groupAdjacentByEquality<T>(array: ArrayLike<T>, equal: (a: T, b: T) => boolean): T[][];
export declare function groupAdjacentByEqualityFn<T>(equal: (a: T, b: T) => boolean): (array: ArrayLike<T>) => T[][];
export declare function groupAdjacentByOrder<T>(array: ArrayLike<T>, compare: Comparator<T>): T[][];
export declare function groupAdjacentByOrderFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[][];
export declare function groupAdjacentByHash<T>(array: ArrayLike<T>, hash: (element: T, index: number) => unknown): T[][];
export declare function groupAdjacentByHashFn<T>(hash: (element: T, index: number) => unknown): (array: ArrayLike<T>) => T[][];
export declare function unique<T>(array: ArrayLike<T>, grouping: Grouping<T>): T[];
export declare function uniqueFn<T>(grouping: Grouping<T>): (array: ArrayLike<T>) => T[];
export declare function uniqueByIdentity<T>(array: ArrayLike<T>, identity?: (element: T) => unknown): T[];
export declare function uniqueByEquality<T>(array: ArrayLike<T>, equal: (a: T, b: T) => boolean): T[];
export declare function uniqueByEqualityFn<T>(equal: (a: T, b: T) => boolean): (array: ArrayLike<T>) => T[];
export declare function uniqueByOrder<T>(array: ArrayLike<T>, compare: Comparator<T>): T[];
export declare function uniqueByOrderFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[];
export declare function uniqueByHash<T>(array: ArrayLike<T>, hash: (element: T, index: number) => unknown): T[];
export declare function uniqueByHashFn<T>(hash: (element: T, index: number) => unknown): (array: ArrayLike<T>) => T[];
export declare function uniqueByEqualityWithHash<T>(array: ArrayLike<T>, equal: (a: T, b: T) => boolean, hash: (element: T, index: number) => unknown): T[];
export declare function uniqueByEqualityWithHashFn<T>(equal: (a: T, b: T) => boolean, hash: (element: T, index: number) => unknown): (array: ArrayLike<T>) => T[];
export declare function uniqueByOrderWithHash<T>(array: ArrayLike<T>, compare: Comparator<T>, hash: (element: T, index: number) => unknown): T[];
export declare function uniqueByOrderWithHashFn<T>(compare: Comparator<T>, hash: (element: T, index: number) => unknown): (array: ArrayLike<T>) => T[];
export declare function uniqueAdjacent<T>(array: ArrayLike<T>, grouping: Grouping<T>): T[];
export declare function uniqueAdjacentFn<T>(grouping: Grouping<T>): (array: ArrayLike<T>) => T[];
export declare function uniqueAdjacentByIdentity<T>(array: ArrayLike<T>, identity?: (element: T) => unknown): T[];
export declare function uniqueAdjacentByIdentityFn<T>(identity: (element: T) => unknown): (array: ArrayLike<T>) => T[];
export declare function uniqueAdjacentByEquality<T>(array: ArrayLike<T>, equal: (a: T, b: T) => boolean): T[];
export declare function uniqueAdjacentByEqualityFn<T>(equal: (a: T, b: T) => boolean): (array: ArrayLike<T>) => T[];
export declare function uniqueAdjacentByOrder<T>(array: ArrayLike<T>, compare: Comparator<T>): T[];
export declare function uniqueAdjacentByOrderFn<T>(compare: Comparator<T>): (array: ArrayLike<T>) => T[];
export declare function uniqueAdjacentByHash<T>(array: ArrayLike<T>, hash: (element: T, index: number) => unknown): T[];
export declare function uniqueAdjacentByHashFn<T>(hash: (element: T, index: number) => unknown): (array: ArrayLike<T>) => T[];
export declare function sort(array: ArrayLike<boolean>): boolean[];
export declare function sort(array: ArrayLike<number>): number[];
export declare function sort(array: ArrayLike<string>): string[];
export declare function sort<T>(array: ArrayLike<T>, comparator: Comparator<T>): T[];
export declare function sortFn<T>(comparator: Comparator<T>): (array: ArrayLike<T>) => T[];
export declare function sortBy<T>(array: ArrayLike<T>, select: SortSelect<T>): T[];
export declare function sortByFn<T>(select: SortSelect<T>): (array: ArrayLike<T>) => T[];
export declare function sortByDescending<T>(array: ArrayLike<T>, select: SortSelect<T>): T[];
export declare function sortByDescendingFn<T>(select: SortSelect<T>): (array: ArrayLike<T>) => T[];
export type SortSelect<T> = ((element: T) => boolean) | ((element: T) => number) | ((element: T) => string);
export declare function forEach<T>(array: ArrayLike<T>, f: (element: T, index: number) => void): typeof array;
export declare function forEachFn<T>(f: (element: T, index: number) => void): (array: ArrayLike<T>) => typeof array;