import { Enumerable } from "../Enumerable/Enumerable"; import { GroupedEnumerable } from "../Enumerable/GroupedEnumerable"; import { IOrderDefinition } from "../Enumerable/Interface/IOrderDefinition"; import { IObjectType, ValueType, GenericType } from "../Common/Type"; import { IEnumerable } from "../Enumerable/IEnumerable"; declare global { interface Array { toArray(): T[]; cast(): TReturn[]; asEnumerable(): Enumerable; select(type: IObjectType, selector: ((item: T) => TReturn)): Enumerable; select(selector: ((item: T) => TReturn)): Enumerable; select(typeOrSelector: IObjectType | ((item: T) => TReturn), selector?: ((item: T) => TReturn)): Enumerable; selectMany(fn: (item: T) => Iterable): Enumerable; contains(item: T): boolean; first(fn?: (item: T) => boolean): T; where(fn: (item: T) => boolean): Enumerable; orderBy(...selectors: IOrderDefinition[]): Enumerable; any(fn?: (item: T) => boolean): boolean; all(fn: (item: T) => boolean): boolean; skip(n: number): Enumerable; take(n: number): Enumerable; sum(fn?: (item: T) => number): number; count(): number; avg(fn?: (item: T) => number): number; max(fn?: (item: T) => number): number; min(fn?: (item: T) => number): number; groupBy(fn: (item: T) => K): Enumerable>; distinct(fn?: (item: T) => TKey): Enumerable; innerJoin(array2: IEnumerable, relation: (item: T, item2: T2) => boolean, resultSelector: (item1: T, item2: T2) => TResult): Enumerable; leftJoin(array2: IEnumerable, relation: (item: T, item2: T2) => boolean, resultSelector: (item1: T, item2: T2 | null) => TResult): Enumerable; rightJoin(array2: IEnumerable, relation: (item: T, item2: T2) => boolean, resultSelector: (item1: T | null, item2: T2) => TResult): Enumerable; fullJoin(array2: IEnumerable, relation: (item: T, item2: T2) => boolean, resultSelector: (item1: T | null, item2: T2 | null) => TResult): Enumerable; groupJoin(array2: IEnumerable, relation: (item: T, item2: T2) => boolean, resultSelector: (item1: T, item2: T2[]) => TResult): Enumerable; crossJoin(array2: IEnumerable, resultSelector: (item1: T, item2: T2) => TResult): Enumerable; union(array2: IEnumerable, all?: boolean): Enumerable; /** * Return array of item exist in both source array and array2. */ intersect(array2: IEnumerable): Enumerable; /** * Return array of item exist in both source array and array2. */ except(array2: IEnumerable): Enumerable; pivot ValueType; }, TM extends { [key: string]: (item: T[]) => ValueType; }, TResult extends { [key in (keyof TD & keyof TM)]: ValueType; }>(dimensions: TD, metric: TM): Enumerable; ofType(type: GenericType): Enumerable; toMap(keySelector: (item: T) => K, valueSelector?: (item: T) => V): Map; } interface Map { asEnumerable(): Enumerable<[K, V]>; } }