declare global {
    interface Array<T> {
        /**
         * Iterates the elements through the reducer function and return first non-null/non-undefined value
         * @param reducer
         */
        computeFirst<Result>(reducer: (input: T, index: number, arr: ReadonlyArray<T>) => Result | null | undefined): Result | null | undefined;
        /**
         * Iterates the elements through the reducer function and return last non-null/non-undefined value
         * @param reducer
         */
        computeLast<Result>(reducer: (input: T, index: number, arr: ReadonlyArray<T>) => Result | null | undefined): Result | null | undefined;
        /**
         * Inserts element at a position and push the element after it forward.
         *
         * Uses `.splice` internally. May be computationally expensive.
         */
        insert(element: T, at: number): T[];
        chunk(chunkSize: number): Generator<T[], void, unknown>;
        groupBy<K, M = T>(key: keyof T | ((getter: T) => unknown), mapper?: (element: T, index: number, array: this) => M): Map<K, [M, ...M[]]>;
    }
}
export {};
