import { GroupedEnumerable } from "./GroupedEnumerable"; import { IOrderDefinition } from "./Interface/IOrderDefinition"; import { IObjectType, ValueType, Pivot } from "../Common/Type"; import { IEnumerable } from "./IEnumerable"; declare module "./Enumerable" { interface Enumerable { cast(): 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(selector: (item: T) => Iterable): Enumerable; where(predicate: (item: T) => boolean): Enumerable; orderBy(...selectors: IOrderDefinition[]): Enumerable; skip(skip: number): Enumerable; take(take: number): Enumerable; groupBy(keySelector: (item: T) => K): Enumerable>; distinct(selector?: (item: T) => any): 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; crossJoin(array2: IEnumerable, resultSelector: (item1: T, item2: T2) => TResult): Enumerable; groupJoin(array2: IEnumerable, relation: (item: T, item2: T2) => boolean, resultSelector: (item1: T, item2: T2[]) => TResult): Enumerable; union(array2: IEnumerable, isUnionAll?: boolean): Enumerable; intersect(array2: IEnumerable): Enumerable; except(array2: IEnumerable): Enumerable; pivot ValueType; }, TM extends { [key: string]: (item: T[]) => ValueType; }>(dimensions: TD, metrics: TM): Enumerable>; } }