import Decimal from 'decimal.js';
type CallbackType<T, Response> = (item: T, index: number, linq: LINQ<T>) => Response;
type CallbackWithAccumType<T, Response, Accum> = (item: T, index: number, linq: LINQ<T>, accum: Accum) => Response;
type CallbackCompareType<T, Response> = (a: T, b: T) => Response;
type CallbackOnlyItemType<T, Response> = (item: T) => Response;
type OfTypeStringValues = 'string' | 'number' | 'bigint' | 'boolean' | 'symbol' | 'undefined' | 'object' | 'function';
export default class LINQ<T> extends Array<T> {
    static from<T>(items?: T[] | LINQ<T>): LINQ<T>;
    static isLINQ(data: any): data is LINQ<any>;
    toArray(): T[];
    clone(): LINQ<T>;
    equals(linq: any[]): boolean;
    equalsValues<K>(linq: any[], selectFunc?: CallbackType<T, K>): boolean;
    where(whereFunc?: CallbackType<T, boolean>): LINQ<T>;
    whereInSelect<K>(selectFunc: CallbackType<T, K>, whereFunc: CallbackType<K, boolean>): LINQ<T>;
    whereInSelectWithAccum<K, Accum = LINQ<K>>(selectFunc: CallbackType<T, K>, getAccumFunc: (selected: LINQ<K>, linq: LINQ<T>) => Accum, whereFunc: CallbackWithAccumType<K, boolean, Accum>): LINQ<T>;
    select(): LINQ<T>;
    select<K>(selectFunc: CallbackType<T, K>): LINQ<K>;
    selectMany<K>(selectFunc?: CallbackType<T, K[]>): LINQ<K>;
    take(count: number): LINQ<T>;
    skip(count: number): LINQ<T>;
    count(whereFunc?: CallbackType<T, boolean>): number;
    indexWhere(whereFunc?: CallbackType<T, boolean>): LINQ<number>;
    elementsAtIndex(indexes: number[]): LINQ<T>;
    notNull<K>(selectFunc?: CallbackType<T, K>): LINQ<T>;
    notEmpty<K>(selectFunc?: CallbackType<T, K>): LINQ<T>;
    first(whereFunc?: CallbackType<T, boolean>): T;
    last(whereFunc?: CallbackType<T, boolean>): T;
    distinct<K>(selectFunc?: CallbackType<T, K>): LINQ<T>;
    max(numberFunc?: CallbackType<T, Decimal.Value>): LINQ<T>;
    maxValue(numberFunc?: CallbackType<T, Decimal.Value>): Decimal;
    min(numberFunc?: CallbackType<T, Decimal.Value>): LINQ<T>;
    minValue(numberFunc?: CallbackType<T, Decimal.Value>): Decimal;
    ofType<Type extends new (...args: any[]) => any, K>(type: OfTypeStringValues | OfTypeStringValues[] | Type | Type[] | (OfTypeStringValues | Type)[], selectFunc?: CallbackType<T, K>): LINQ<T>;
    orderByAscending<K>(sortSelectFunc?: CallbackOnlyItemType<T, K>): LINQ<T>;
    orderByDescending<K>(sortSelectFunc?: CallbackOnlyItemType<T, K>): LINQ<T>;
    sum(selectFunc?: CallbackType<T, Decimal.Value>): Decimal;
    except<K>(items: T | T[] | LINQ<T>, selectFunc?: CallbackType<T, K>): LINQ<T>;
    groupBy<K>(selectFunc: CallbackType<T, K>, compareKeyFunc?: CallbackCompareType<K, boolean>): LINQ<[K, LINQ<T>]>;
    contains<K>(value: T, selectFunc?: CallbackOnlyItemType<T, K>): boolean;
    containsAll<K>(value: T[] | LINQ<T>, selectFunc?: CallbackType<T, K>): boolean;
    average(selectFunc?: CallbackType<T, Decimal.Value>, whereFunc?: CallbackType<T, boolean>): Decimal;
    intersect<K>(items: T | T[] | LINQ<T>, selectFunc?: CallbackType<T, K>): LINQ<T>;
    reverse(): LINQ<T>;
    concat(...items: ConcatArray<T>[]): LINQ<T>;
    concat(...items: (T | ConcatArray<T>)[]): LINQ<T>;
    concat(...items: (T | ConcatArray<T> | LINQ<T>)[]): LINQ<T>;
    slice(start?: number, end?: number): LINQ<T>;
    splice(start: number, deleteCount?: number): LINQ<T>;
    splice(start: number, deleteCount: number, ...items: T[]): LINQ<T>;
    map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): LINQ<U>;
    filter<S extends T>(callbackfn: (value: T, index: number, array: T[]) => value is S, thisArg?: any): LINQ<S>;
    filter(callbackfn: (value: T, index: number, array: T[]) => unknown, thisArg?: any): LINQ<T>;
}
export {};
