import type { ReadonlyDeep, ReplaceType, SiftNone } from "./Util" declare namespace SiftArray { export function at( array: V[], index: number ): V | undefined export function concat(...arrays: T[]): T export function concatDeep(...arrays: T[]): T export function copy(array: T): T export function copyDeep(array: T): T export function count( array: T[], predicate: (value: T, index: number, array: Readonly) => unknown ): number export function create(length: number, value?: T): T[] export function dedupe(arr: T[]): T[] export function difference(array: T[], ...values: T[][]): T[] export function differenceSymmetric(array: T[], ...values: T[][]): T[] export function equals(...arrays: unknown[]): boolean export function equalsDeep(...arrays: unknown[]): boolean export function every( array: T[], predicate: (value: T, index: number, array: Readonly) => unknown ): boolean export function filter( array: T[], filterer?: (value: T, index: number, array: Readonly) => unknown ): T[] export function find( array: T[], value?: T, from?: number ): number | undefined export function findLast( array: T[], value?: T, from?: number ): number | undefined export function findWhere( array: T[], predicate: (value: T, index: number, array: Readonly) => unknown, from?: number ): number export function findWhereLast( array: T[], predicate: (value: T, index: number, array: Readonly) => unknown, from?: number ): number export function first(array: T[]): T export function flatten(array: T[], depth?: number): T[] export function freeze(array: T[]): Readonly export function freezeDeep(array: T[]): ReadonlyDeep export function includes(array: T[], value: T, from?: number): boolean export function insert(array: T[], index: number, ...values: T[]): T[] export function is(value: any): boolean export function last(array: T[]): T export function map( array: T[], mapper: (value: T, index: number, array: Readonly) => U ): U[] export function pop(array: T[], count?: number): T[] export function push(array: T[], ...values: T[]): T[] export function reduce( array: T[], reducer: ( accumulator: U, value: T, index: number, array: Readonly ) => U, initialValue?: U ): U export function reduceRight( array: T[], reducer: ( accumulator: U, value: T, index: number, array: Readonly ) => U, initialValue?: U ): U export function removeIndex(array: T[], index: number): T[] export function removeIndices(array: T[], ...indices: number[]): T[] export function removeValue(array: T[], value: T): T[] export function removeValues(array: T[], ...values: T[]): T[] export function reverse(array: T[]): T[] export function set(array: T[], index: number, value: T): T[] export function shift(array: T[], count?: number): T[] export function shuffle(array: T[]): T[] export function slice(array: T[], from?: number, to?: number): T[] export function some( array: T[], predicate: (value: T, index: number, array: Readonly) => unknown ): boolean export function sort(array: T[], comparator?: (a: T, b: T) => unknown): T[] export function splice( array: T[], start?: number, end?: number, ...values: T[] ): T[] export function toSet(array: T[]): Set export function unshift(array: T[], ...values: T[]): T[] export function update( array: T[], index: number, updater?: (value: T, index: number) => T, callback?: (index: number) => T ): T[] export function zip( ...arrays: T ): { [K in keyof T]: T[K] extends (infer V)[] ? V : never }[] export function zipAll( ...arrays: T ): { [K in keyof T]: ReplaceType< T[K] extends (infer V)[] ? V : never, undefined, SiftNone > }[] // Aliases export { concat as join, concat as merge, concatDeep as joinDeep, concatDeep as mergeDeep, find as indexOf, includes as contains, includes as has, push as append, unshift as prepend, is as isArray, } } export = SiftArray