declare namespace Enumerable { const defaultComparer; const defaultEqualityComparer; const defaultStrictEqualityComparer; const defaultPredicate; const defaultFalsePredicate; const defaultExistsPredicate; const defaultSelector; const defaultKeySelector; const defaultValueSelector; const defaultParentSelector; const defaultChildrenSelector; const defaultResultSelector; const defaultJoinSelector; const defaultSameComparer; const defaultChildrenSetter; const defaultValueSetter; export function asEnumerable(obj: string) : IEnumerable; export function asEnumerable(obj: T[] | IEnumerable) : IEnumerable; export function asEnumerable(obj: any) : IEnumerable; export function asEnumerable(obj: object, childrenSelector: (element: T) => T[] | IEnumerable = defaultChildrenSelector, valueSelector: (element: T) => TValue = defaultValueSelector): ITree; export function asEnumerable(obj: object, childrenSelector: string | number | symbol, valueSelector: (element: T) => TValue = defaultValueSelector): ITree; export function asEnumerable(obj: object, childrenSelector: (element: T) => T[] | IEnumerable = defaultChildrenSelector, valueSelector: string | number | symbol): ITree; export function asEnumerable(obj: object, childrenSelector: string | number | symbol, valueSelector: string | number | symbol): ITree; export function from(obj: string) : IEnumerable; export function from(obj: T[] | IEnumerable) : IEnumerable; export function from(obj: any) : IEnumerable; export function range(start: number, count: number, step: number = 1): IEnumerable; export function between(start: number, end: number, step: number = 1): IEnumerable; export function repeat(element: T, count: number): IEnumerable; export function empty(): IEnumerable; export function generate(generate: (index: number) => T, count: number = 0): IEnumerable; export function noConflict(flag: boolean = false); export function noConflict(callback: (Enumerable) => void); export function where(source: T[] | IEnumerable, predicate: (element: T, index?: number) => boolean = defaultPredicate): IEnumerable; export function where(source: T[] | IEnumerable, predicate: string | number | symbol | T | any): IEnumerable; export function select(source: T[] | IEnumerable, selector: (element: T, index?: number) => TResult = defaultSelector): IEnumerable; export function select(source: T[] | IEnumerable, selector: string | number | symbol): IEnumerable; export function aggregate(source: T[] | IEnumerable, seed: TSeed, func: (seed: TSeed, element: T, index?: number) => TSeed, resultSelector: (result: TSeed) => TResult = defaultSelector): TResult; export function aggregate(source: T[] | IEnumerable, seed: TSeed, func: (seed: TSeed, element: T, index?: number) => TSeed, resultSelector: string | number | symbol): TResult; export function all(source: T[] | IEnumerable, predicate: (element: T, index?: number) => boolean = defaultPredicate): boolean; export function all(source: T[] | IEnumerable, predicate: string | number | symbol | T | any): boolean; export function any(source: T[] | IEnumerable): boolean; export function any(source: T[] | IEnumerable, predicate: (element: T, index?: number) => boolean = defaultPredicate): boolean; export function any(source: T[] | IEnumerable, predicate: string | number | symbol | T | any): boolean; export function asEnumerable(source: T[] | IEnumerable): IEnumerable; export function average(source: T[] | IEnumerable, selector: (element: T, index?: number) => number = defaultSelector): number; export function average(source: T[] | IEnumerable, selector: string | number | symbol): number; export function chunk(source: T[] | IEnumerable, chunk, offset = 0): IEnumerable>; export function split(source: T[] | IEnumerable, splitPredicate: (element: T, index?: number) => boolean = defaultFalsePredicate): IEnumerable>; export function split(source: T[] | IEnumerable, splitPredicate: string | number | symbol | T | RegExp | any): IEnumerable>; export function nearSplit(source: T[] | IEnumerable, splitPredicate: (element: T, index?: number) => boolean = defaultFalsePredicate): IEnumerable>; export function nearSplit(source: T[] | IEnumerable, splitPredicate: string | number | symbol | T | RegExp | any): IEnumerable>; export function concat(source: T[] | IEnumerable, ...other: T[][]): IEnumerable; export function concat(source: T[] | IEnumerable, ...other: T[]): IEnumerable; export function concat(source: T[] | IEnumerable, ...other: IEnumerable[]): IEnumerable; export function contains(source: T[] | IEnumerable, value: T): boolean; export function contains(source: T[] | IEnumerable, value: TOther, comparer: (element: T, other: TOther) => boolean = defaultEqualityComparer): boolean; export function contains(source: T[] | IEnumerable, value: TOther, comparer: string | number | symbol): boolean; export function copyWithin(source: T[] | IEnumerable, target: number = 0, start: number = 0, end: number = Number.POSITIVE_INFINITY): IEnumerable; export function count(source: T[] | IEnumerable, predicate: (element: T, index?: number) => boolean = defaultPredicate): number; export function count(source: T[] | IEnumerable, predicate: string | number | symbol | T | any): number; export function proportion(source: T[] | IEnumerable, predicate: (element: T, index?: number) => boolean = defaultPredicate): number; export function proportion(source: T[] | IEnumerable, predicate: string | number | symbol | T | any): number; export function defaultIfEmpty(source: T[] | IEnumerable, defaultValue?: T): IEnumerable; export function distinct(source: T[] | IEnumerable, comparer: (element: T, other: T) => boolean = defaultEqualityComparer): IEnumerable; export function distinct(source: T[] | IEnumerable, comparer: string | number | symbol): IEnumerable; export function elementAt(source: T[] | IEnumerable, index: number): T; export function elementAtOrDefault(source: T[] | IEnumerable, index: number, defaultValue: T): T; export function every(source: T[] | IEnumerable, callback: (element: T, index?: number, source?: IEnumerable) => boolean, thisArg?: any): boolean; export function except(source: T[] | IEnumerable, other: TOther[] | IEnumerable, comparer: (element: T, other: TOther) => boolean = defaultEqualityComparer): IEnumerable; export function except(source: T[] | IEnumerable, other: TOther[] | IEnumerable, comparer: string | number | symbol): IEnumerable; export function fill(source: T[] | IEnumerable, value: T, start: number = 0, end: number = Number.POSITIVE_INFINITY); export function filter(source: T[] | IEnumerable, callback: (element: T, index?: number, source?: IEnumerable) => TResult, thisArg?: any): IEnumerable; export function find(source: T[] | IEnumerable, callback: (element: T, index?: number, source?: IEnumerable) => boolean, thisArg?: any): T; export function findIndex(source: T[] | IEnumerable, callback: (element: T, index?: number, source?: IEnumerable) => boolean, thisArg?: any): number; export function findLast(source: T[] | IEnumerable, callback: (element: T, index?: number, source?: IEnumerable) => boolean, thisArg?: any): T; export function findLastIndex(source: T[] | IEnumerable, callback: (element: T, index?: number, source?: IEnumerable) => boolean, thisArg?: any): number; export function first(source: T[] | IEnumerable, predicate: (element: T, index?: number) => boolean = defaultPredicate): T; export function first(source: T[] | IEnumerable, predicate: string | number | symbol | T | any): T; export function firstOrDefault(source: T[] | IEnumerable, defaultValue: T, predicate: (element: T, index?: number) => boolean = defaultPredicate): T; export function firstOrDefault(source: T[] | IEnumerable, defaultValue: T, predicate: string | number | symbol | T | any): T; export function forEach(source: T[] | IEnumerable, action: (element: T, index?: number, source?: IEnumerable) => void, thisArg?: any): void; export function forEach(source: IMapEnumerable, action: (element: TValue, key: TKey, source?: IMapEnumerable) => void, thisArg?: any): void; export function each(source: T[] | IEnumerable, action: (element: T, index?: number) => void): IEnumerable; export function indices(source: T[] | IEnumerable, indices: number[] | IEnumerable): IEnumerable; export function permutation(source: T[] | IEnumerable, count: number, repeatable: boolean = false): IEnumerable>; export function combination(source: T[] | IEnumerable, count: number, repeatable: boolean = false): IEnumerable>; export function groupBy(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function groupBy(source: T[] | IEnumerable, keySelector: string | number | symbol, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function groupBy(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function groupBy(source: T[] | IEnumerable, keySelector: string | number | symbol, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function groupBy(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; export function groupBy(source: T[] | IEnumerable, keySelector: string | number | symbol, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; export function groupBy(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; export function groupBy(source: T[] | IEnumerable, keySelector: string | number | symbol, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; export function groupJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function groupJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function groupJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function groupJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function groupJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; export function groupJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; export function groupJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; export function groupJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; export function includes(source: T[] | IEnumerable, element: T, start: number = 0): boolean; export function indexOf(source: T[] | IEnumerable, element: TOther, start: number = 0, comparer: (element: T, other: TOther) => boolean = defaultStrictEqualityComparer): number; export function indexOf(source: T[] | IEnumerable, element: TOther, start: number = 0, comparer: string | number | symbol): number; export function lastIndexOf(source: T[] | IEnumerable, element: TOther, start: number = 0, comparer: (element: T, other: TOther) => boolean = defaultStrictEqualityComparer): number; export function lastIndexOf(source: T[] | IEnumerable, element: TOther, start: number = 0, comparer: string | number | symbol): number; export function innerJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function innerJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function innerJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function innerJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function innerJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; export function innerJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; export function innerJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; export function innerJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; export function intersect(source: T[] | IEnumerable, other: TOther[] | IEnumerable, comparer: (element: T, other: TOther) => boolean = defaultEqualityComparer): IEnumerable; export function intersect(source: T[] | IEnumerable, other: TOther[] | IEnumerable, comparer: string | number | symbol): IEnumerable; export function join(source: T[] | IEnumerable, split: string): string; export function join(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function join(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function join(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function join(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function join(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; export function join(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; export function join(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; export function join(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; export function last(source: T[] | IEnumerable, predicate: (element: T, index: number) => boolean = defaultPredicate): T; export function last(source: T[] | IEnumerable, predicate: string | number | symbol | T | any): T; export function lastOrDefault(source: T[] | IEnumerable, defaultValue: T, predicate: (element: T, index: number) => boolean = defaultPredicate): T; export function lastOrDefault(source: T[] | IEnumerable, defaultValue: T, predicate: string | number | symbol | T | any): T; export function leftJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function leftJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function leftJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function leftJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function leftJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; export function leftJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; export function leftJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; export function leftJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; export function rightJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function rightJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function rightJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function rightJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; export function rightJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; export function rightJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; export function rightJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; export function rightJoin(source: T[] | IEnumerable, inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; export function leftPad(source: T[] | IEnumerable, length: number, value: T): IEnumerable; export function rightPad(source: T[] | IEnumerable, length: number, value: T): IEnumerable; export function map(source: T[] | IEnumerable, callback: (element: T, index?: number, source?: IEnumerable) => TOther, thisArg?: any): IEnumerable; export function max(source: T[] | IEnumerable, selector: (element: T, index?: number) => number = defaultSelector): T; export function max(source: T[] | IEnumerable, selector: (element: T, index?: number) => string): T; export function max(source: T[] | IEnumerable, selector: string | number | symbol): T; export function max(source: T[] | IEnumerable, selector: (element: T, index?: number) => TResult, comparer: (element: TResult, other: TResult) => number): T; export function max(source: T[] | IEnumerable, selector: string | number | symbol, comparer: (element: TResult, other: TResult) => number): T; export function max(source: T[] | IEnumerable, selector: (element: T, index?: number) => TResult, comparer: string | number | symbol): T; export function max(source: T[] | IEnumerable, selector: string | number | symbol, comparer: string | number | symbol): T; export function maxIndex(source: T[] | IEnumerable, selector: (element: T, index?: number) => number = defaultSelector): number; export function maxIndex(source: T[] | IEnumerable, selector: (element: T, index?: number) => string): number; export function maxIndex(source: T[] | IEnumerable, selector: string | number | symbol): number; export function maxIndex(source: T[] | IEnumerable, selector: (element: T, index?: number) => TResult, comparer: (element: TResult, other: TResult) => number): number; export function maxIndex(source: T[] | IEnumerable, selector: string | number | symbol, comparer: (element: TResult, other: TResult) => number): number; export function maxIndex(source: T[] | IEnumerable, selector: (element: T, index?: number) => TResult, comparer: string | number | symbol): number; export function maxIndex(source: T[] | IEnumerable, selector: string | number | symbol, comparer: string | number | symbol): number; export function maxOrDefault(source: T[] | IEnumerable, defaultValue: T, selector: (element: T, index?: number) => number = defaultSelector): T; export function maxOrDefault(source: T[] | IEnumerable, defaultValue: T, selector: (element: T, index?: number) => string): T; export function maxOrDefault(source: T[] | IEnumerable, defaultValue: T, selector: string | number | symbol): T; export function maxOrDefault(source: T[] | IEnumerable, defaultValue: T, selector: (element: T, index?: number) => TResult, comparer: (element: TResult, other: TResult) => number): T; export function maxOrDefault(source: T[] | IEnumerable, defaultValue: T, selector: string | number | symbol, comparer: (element: TResult, other: TResult) => number): T; export function maxOrDefault(source: T[] | IEnumerable, defaultValue: T, selector: (element: T, index?: number) => TResult, comparer: string | number | symbol): T; export function maxOrDefault(source: T[] | IEnumerable, defaultValue: T, selector: string | number | symbol, comparer: string | number | symbol): T; export function min(source: T[] | IEnumerable, selector: (element: T, index?: number) => number = defaultSelector): T; export function min(source: T[] | IEnumerable, selector: (element: T, index?: number) => string): T; export function min(source: T[] | IEnumerable, selector: string | number | symbol): T; export function min(source: T[] | IEnumerable, selector: (element: T, index?: number) => TResult, comparer: (element: TResult, other: TResult) => number): T; export function min(source: T[] | IEnumerable, selector: string | number | symbol, comparer: (element: TResult, other: TResult) => number): T; export function min(source: T[] | IEnumerable, selector: (element: T, index?: number) => TResult, comparer: string | number | symbol): T; export function min(source: T[] | IEnumerable, selector: string | number | symbol, comparer: string | number | symbol): T; export function minIndex(source: T[] | IEnumerable, selector: (element: T, index?: number) => number = defaultSelector): number; export function minIndex(source: T[] | IEnumerable, selector: (element: T, index?: number) => string): number; export function minIndex(source: T[] | IEnumerable, selector: string | number | symbol): number; export function minIndex(source: T[] | IEnumerable, selector: (element: T, index?: number) => TResult, comparer: (element: TResult, other: TResult) => number): number; export function minIndex(source: T[] | IEnumerable, selector: string | number | symbol, comparer: (element: TResult, other: TResult) => number): number; export function minIndex(source: T[] | IEnumerable, selector: (element: T, index?: number) => TResult, comparer: string | number | symbol): number; export function minIndex(source: T[] | IEnumerable, selector: string | number | symbol, comparer: string | number | symbol): number; export function minOrDefault(source: T[] | IEnumerable, defaultValue: T, selector: (element: T, index?: number) => number = defaultSelector): T; export function minOrDefault(source: T[] | IEnumerable, defaultValue: T, selector: (element: T, index?: number) => string): T; export function minOrDefault(source: T[] | IEnumerable, defaultValue: T, selector: string | number | symbol): T; export function minOrDefault(source: T[] | IEnumerable, defaultValue: T, selector: (element: T, index?: number) => TResult, comparer: (element: TResult, other: TResult) => number): T; export function minOrDefault(source: T[] | IEnumerable, defaultValue: T, selector: string | number | symbol, comparer: (element: TResult, other: TResult) => number): T; export function minOrDefault(source: T[] | IEnumerable, defaultValue: T, selector: (element: T, index?: number) => TResult, comparer: string | number | symbol): T; export function minOrDefault(source: T[] | IEnumerable, defaultValue: T, selector: string | number | symbol, comparer: string | number | symbol): T; export function ofType(source: T[] | IEnumerable, type: string): IEnumerable; export function ofType(source: T[] | IEnumerable, type: any): IEnumerable; export function orderBy(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; export function orderBy(source: T[] | IEnumerable, keySelector: string | number | symbol, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; export function orderBy(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: string | number | symbol): IOrderedEnumerable; export function orderBy(source: T[] | IEnumerable, keySelector: string | number | symbol, comparer: string | number | symbol): IOrderedEnumerable; export function orderByDescending(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; export function orderByDescending(source: T[] | IEnumerable, keySelector: string | number | symbol, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; export function orderByDescending(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: string | number | symbol): IOrderedEnumerable; export function orderByDescending(source: T[] | IEnumerable, keySelector: string | number | symbol, comparer: string | number | symbol): IOrderedEnumerable; export function pop(source: T[] | IEnumerable): T; export function product(source: T[] | IEnumerable, selector: (element: T, index?: number) => number = defaultSelector): number; export function product(source: T[] | IEnumerable, selector: string | number | symbol): number; export function push(source: T[] | IEnumerable, ...values: T[]): number; export function rand(source: T[] | IEnumerable, count: number): IEnumerable; export function random(source: T[] | IEnumerable): T; export function randomOrDefault(source: T[] | IEnumerable, defaultValue: T): T; export function randomProbability(source: T[] | IEnumerable, probabilitySelector: (element: T, index?: number) => number = defaultSelector): T; export function randomProbability(source: T[] | IEnumerable, probabilitySelector: string | number | symbol): T; export function randomIndexProbability(source: T[] | IEnumerable, probabilitySelector: (element: T, index?: number) => number = defaultSelector): number; export function randomIndexProbability(source: T[] | IEnumerable, probabilitySelector: string | number | symbol): number; export function randomProbabilityOrDefault(source: T[] | IEnumerable, defaultValue: T, probabilitySelector: (element: T, index?: number) => number = defaultSelector): T; export function randomProbabilityOrDefault(source: T[] | IEnumerable, defaultValue: T, probabilitySelector: string | number | symbol): T; export function reduce(source: T[] | IEnumerable, callback: (seed: TSeed, element: T, index?: number) => TSeed, initialValue: TSeed): TSeed; export function reduceRight(source: T[] | IEnumerable, callback: (seed: TSeed, element: T, index?: number) => TSeed, initialValue: TSeed): TSeed; export function reverse(source: T[] | IEnumerable): IEnumerable; export function selectMany(source: T[] | IEnumerable, collectionSelector: (element: T, index?: number) => TElement[] | IEnumerable = defaultSelector, resultSelector: (sourceElement: T, collectionElement: TElement) => TResult = defaultResultSelector): IEnumerable; export function selectMany(source: T[] | IEnumerable, collectionSelector: string | number | symbol, resultSelector: (sourceElement: T, collectionElement: TElement) => TResult = defaultResultSelector): IEnumerable; export function sequenceEqual(source: T[] | IEnumerable, other: TOther[] | IEnumerable, comparer: (element: T, other: TOther) => boolean = defaultEqualityComparer): boolean; export function sequenceEqual(source: T[] | IEnumerable, other: TOther[] | IEnumerable, comparer: string | number | symbol): boolean; export function shift(source: T[] | IEnumerable): T; export function single(source: T[] | IEnumerable, predicate: (element: T, index?: number) => boolean = defaultPredicate): T; export function single(source: T[] | IEnumerable, predicate: string | number | symbol | T | any): T; export function singleOrDefault(source: T[] | IEnumerable, defaultValue: T, predicate: (element: T, index?: number) => boolean = defaultPredicate): T; export function singleOrDefault(source: T[] | IEnumerable, defaultValue: T, predicate: string | number | symbol | T | any): T; export function skip(source: T[] | IEnumerable, count: number): IEnumerable; export function skipWhile(source: T[] | IEnumerable, predicate: (element: T, index?: number) => boolean): IEnumerable; export function skipWhile(source: T[] | IEnumerable, predicate: string | number | symbol | T | any): IEnumerable; export function skipSame(source: T[] | IEnumerable, comparer: (element: T, other: T) => boolean = defaultSameComparer): IEnumerable; export function skipSame(source: T[] | IEnumerable, comparer: string | number | symbol): IEnumerable; export function skipProportion(source: T[] | IEnumerable, proportion: number): IEnumerable; export function take(source: T[] | IEnumerable, count: number): IEnumerable; export function takeWhile(source: T[] | IEnumerable, predicate: (element: T, index?: number) => boolean): IEnumerable; export function takeWhile(source: T[] | IEnumerable, predicate: string | number | symbol | T | any): IEnumerable; // @ts-ignore export function takeSame(source: T[] | IEnumerable, comparer: (element: T, other: T) => boolean = defaultSameComparer): IEnumerable; export function takeSame(source: T[] | IEnumerable, comparer: string | number | symbol): IEnumerable; export function takeProportion(source: T[] | IEnumerable, proportion: number): IEnumerable; export function slice(source: T[] | IEnumerable, start: number, end: number): IEnumerable; export function some(source: T[] | IEnumerable, callback: (element: T, index?: number, source?: IEnumerable) => boolean, thisArg?: any): boolean; // @ts-ignore export function sort(source: T[] | IEnumerable, comparer: (element: T, other: T) => number = defaultComparer): IEnumerable; export function sort(source: T[] | IEnumerable, comparer: string | number | symbol): IEnumerable; export function sum(source: T[] | IEnumerable, selector: (element: T, index?: number) => number = defaultSelector): number; export function sum(source: T[] | IEnumerable, selector: string | number | symbol): number; export function union(source: T[] | IEnumerable, other: T[] | IEnumerable, comparer: (element: T, other: T) => boolean = defaultEqualityComparer): IEnumerable; export function union(source: T[] | IEnumerable, other: T[] | IEnumerable, comparer: string | number | symbol): IEnumerable; export function unshift(source: T[] | IEnumerable, ...values: T[]): number; export function zip(source: T[] | IEnumerable, other: TOther[] | IEnumerable, resultSelector: (element: T, other: TOther) => TResult): IEnumerable; export function wipe(source: T[] | IEnumerable, predicate: (element: T, index?: number) => boolean = defaultPredicate, count: number = 0): IEnumerable; export function wipe(source: T[] | IEnumerable, predicate: string | number | symbol | T | any, count: number = 0): IEnumerable; export function nearBy(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function nearBy(source: T[] | IEnumerable, keySelector: string | number | symbol, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function nearBy(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function nearBy(source: T[] | IEnumerable, keySelector: string | number | symbol, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function nearBy(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; export function nearBy(source: T[] | IEnumerable, keySelector: string | number | symbol, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; export function nearBy(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; export function nearBy(source: T[] | IEnumerable, keySelector: string | number | symbol, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; export function separate(source: T[] | IEnumerable, childrenSelector: (element: T) => T[] | IEnumerable = defaultChildrenSelector, valueSelector: (element: T) => TResult = defaultValueSelector): IEnumerable; export function separate(source: T[] | IEnumerable, childrenSelector: string | number | symbol, valueSelector: (element: T) => TResult = defaultValueSelector): IEnumerable; export function separate(source: T[] | IEnumerable, childrenSelector: (element: T) => T[] | IEnumerable = defaultChildrenSelector, valueSelector: string | number | symbol): IEnumerable; export function separate(source: T[] | IEnumerable, childrenSelector: string | number | symbol, valueSelector: string | number | symbol): IEnumerable; export function combine(source: T[] | IEnumerable, parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: (element: T) => TValue = defaultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: string | number | symbol, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: (element: T) => TValue = defaultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: string | number | symbol, valueSelector: (element: T) => TValue = defaultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: string | number | symbol, keySelector: string | number | symbol, valueSelector: (element: T) => TValue = defaultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: string | number | symbol, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: string | number | symbol, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: string | number | symbol, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: string | number | symbol, keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: (element: T) => TValue = defaultSelector, comparer: string | number | symbol): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: string | number | symbol, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: (element: T) => TValue = defaultSelector, comparer: string | number | symbol): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: string | number | symbol, valueSelector: (element: T) => TValue = defaultSelector, comparer: string | number | symbol): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: string | number | symbol, keySelector: string | number | symbol, valueSelector: (element: T) => TValue = defaultSelector, comparer: string | number | symbol): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: string | number | symbol, comparer: string | number | symbol): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: string | number | symbol, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: string | number | symbol, comparer: string | number | symbol): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: string | number | symbol): IEnumerable>; export function combine(source: T[] | IEnumerable, parentSelector: string | number | symbol, keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: string | number | symbol): IEnumerable>; export function isSub(source: T[] | IEnumerable, other: T[] | IEnumerable, comparer: (element: T, other: T) => boolean): boolean; export function isSub(source: T[] | IEnumerable, other: T[] | IEnumerable, comparer: string | number | symbol): boolean; export function isSuper(source: T[] | IEnumerable, other: T[] | IEnumerable, comparer: (element: T, other: T) => boolean): boolean; export function isSuper(source: T[] | IEnumerable, other: T[] | IEnumerable, comparer: string | number | symbol): boolean; export function symmetric(source: T[] | IEnumerable, other: T[] | IEnumerable, comparer: (element: T, other: T) => boolean): IEnumerable; export function symmetric(source: T[] | IEnumerable, other: T[] | IEnumerable, comparer: string | number | symbol): IEnumerable; export function toArray(source: T[] | IEnumerable): T[]; export function toDirectory(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey, valueSelector: (element: T, index?: number) => TValue, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Directory; export function toDirectory(source: T[] | IEnumerable, keySelector: string | number | symbol, valueSelector: (element: T, index?: number) => TValue, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Directory; export function toDirectory(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey, valueSelector: string | number | symbol, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Directory; export function toDirectory(source: T[] | IEnumerable, keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Directory; export function toDirectory(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey, valueSelector: (element: T, index?: number) => TValue, comparer: string | number | symbol) : Directory; export function toDirectory(source: T[] | IEnumerable, keySelector: string | number | symbol, valueSelector: (element: T, index?: number) => TValue, comparer: string | number | symbol) : Directory; export function toDirectory(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey, valueSelector: string | number | symbol, comparer: string | number | symbol) : Directory; export function toDirectory(source: T[] | IEnumerable, keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: string | number | symbol) : Directory; export function toLookup(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey, valueSelector: (element: T, index?: number) => TValue, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Lookup; export function toLookup(source: T[] | IEnumerable, keySelector: string | number | symbol, valueSelector: (element: T, index?: number) => TValue, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Lookup; export function toLookup(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey, valueSelector: string | number | symbol, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Lookup; export function toLookup(source: T[] | IEnumerable, keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Lookup; export function toLookup(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey, valueSelector: (element: T, index?: number) => TValue, comparer: string | number | symbol) : Lookup; export function toLookup(source: T[] | IEnumerable, keySelector: string | number | symbol, valueSelector: (element: T, index?: number) => TValue, comparer: string | number | symbol) : Lookup; export function toLookup(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => TKey, valueSelector: string | number | symbol, comparer: string | number | symbol) : Lookup; export function toLookup(source: T[] | IEnumerable, keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: string | number | symbol) : Lookup; export function toObject(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => string, valueSelector: (element: T, index?: number) => TValue, comparer: (element: string, other: string) => boolean = defaultSameComparer) : any; export function toObject(source: T[] | IEnumerable, keySelector: string | number | symbol, valueSelector: (element: T, index?: number) => TValue, comparer: (element: string, other: string) => boolean = defaultSameComparer) : any; export function toObject(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => string, valueSelector: string | number | symbol, comparer: (element: string, other: string) => boolean = defaultSameComparer) : any; export function toObject(source: T[] | IEnumerable, keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: (element: string, other: string) => boolean = defaultSameComparer) : any; export function toObject(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => string, valueSelector: (element: T, index?: number) => TValue, comparer: string | number | symbol) : any; export function toObject(source: T[] | IEnumerable, keySelector: string | number | symbol, valueSelector: (element: T, index?: number) => TValue, comparer: string | number | symbol) : any; export function toObject(source: T[] | IEnumerable, keySelector: (element: T, index?: number) => string, valueSelector: string | number | symbol, comparer: string | number | symbol) : any; export function toObject(source: T[] | IEnumerable, keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: string | number | symbol) : any; export function toPreOrder(source: T[] | IEnumerable): BinaryTree; export function toInOrder(source: T[] | IEnumerable): BinaryTree; export function toPostOrder(source: T[] | IEnumerable): BinaryTree; export function thenBy(source: IOrderedEnumerable, keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; export function thenBy(source: IOrderedEnumerable, keySelector: string | number | symbol, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; export function thenBy(source: IOrderedEnumerable, keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: string | number | symbol): IOrderedEnumerable; export function thenBy(source: IOrderedEnumerable, keySelector: string | number | symbol, comparer: string | number | symbol): IOrderedEnumerable; export function thenByDescending(source: IOrderedEnumerable, keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; export function thenByDescending(source: IOrderedEnumerable, keySelector: string | number | symbol, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; export function thenByDescending(source: IOrderedEnumerable, keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: string | number | symbol): IOrderedEnumerable; export function thenByDescending(source: IOrderedEnumerable, keySelector: string | number | symbol, comparer: string | number | symbol): IOrderedEnumerable; class Exception extends Error { constructor(message: string); } class NoSuchElementsException extends Exception { constructor(); } class OutOfRangeException extends Exception { constructor(index: number); } class TooManyElementsException extends Exception { constructor(); } class KeysForMultiElementsException extends Exception { constructor(key: any); } class NeedExecuteBeforeException extends Exception { constructor(methodName: string); } class PropertyExpressionInvalidException extends Exception{ constructor(property: string); } class InvalidFunctionException extends Exception { constructor(fun: any); } class PluginRepeatException extends Exception { constructor(plugin: Plugin, builtin = false); } class NotAncestorOfException extends Exception { constructor(ancestor:ITree, descendant:ITree) } export const exceptions: { readonly NoSuchElementsException: NoSuchElementsException; readonly OutOfRangeException: OutOfRangeException; readonly TooManyElementsException: TooManyElementsException; readonly KeysForMultiElementsException: KeysForMultiElementsException; readonly NeedExecuteBeforeException: NeedExecuteBeforeException; readonly PropertyExpressionInvalidException: PropertyExpressionInvalidException; readonly InvalidFunctionException: InvalidFunctionException; readonly PluginRepeatException: PluginRepeatException; readonly NotAncestorOfException: NotAncestorOfException; }; export const comparers: { readonly default: (element: any, other: any) => number; readonly equality: (element: any, other: any) => boolean; readonly same: (element: any, other: any) => boolean; readonly strict: (element: any, other: any) => boolean; array(array: TArray[] | IEnumerable, last: boolean = false, comparer: (element: TArray, other: T) => boolean = defaultEqualityComparer): (element: T, other: T) => number; array(array: TArray[] | IEnumerable, last: boolean = false, comparer: string | number | symbol): (element: T, other: T) => number; predicate(predicateArray: ((element: T) => boolean)[] | IEnumerable<(element: T) => boolean>, last = false): (element: T, other: T) => number; greater(greaterThen: (element: T, other: T) => boolean, comparer: (element: T, other: T) => boolean = defaultEqualityComparer): (element: T, other: T) => number; greater(greaterThen: (element: T, other: T) => boolean, comparer: string | number | symbol): (element: T, other: T) => number; less(greaterThen: (element: T, other: T) => boolean, comparer: (element: T, other: T) => boolean = defaultEqualityComparer): (element: T, other: T) => number; less(greaterThen: (element: T, other: T) => boolean, comparer: string | number | symbol): (element: T, other: T) => number; ignoreCase(): (element: string, other: string) => boolean; ignoreCase(selector: (element: T) => string = defaultSelector): (element: T, other: T) => boolean; ignoreCase(selector: string | number | symbol): (element: T, other: T) => boolean; }; export const selectors: { readonly default: (element: any, index?: number) => any; readonly key: (element: any, index?: number) => any; readonly value: (element: any, index?: number) => any; readonly result: (element: any, index?: number) => any; readonly join: (element: any, index?: number) => any; property(property: string): (element: T, index?: number) => TResult; }; export const actions: { readonly default: (element: any, index?: number) => void; }; export var config: { readonly extends: { array: boolean; object: boolean; string: boolean; lazy: boolean; }; as: string; }; export const predicates: { readonly default: (element: any) => boolean; readonly exists: (element: any) => boolean; selector(selector: (element: T, index?: number) => TResult, predicate: (element: TResult) => boolean = defaultExistsPredicate): (element: T, index?: number) => boolean; selector(selector: string | number | symbol, predicate: (element: TResult) => boolean = defaultExistsPredicate): (element: T, index?: number) => boolean; selector(selector: (element: T, index?: number) => TResult, predicate: string | number | symbol | T | any): (element: T, index?: number) => boolean; selector(selector: string | number | symbol, predicate: string | number | symbol | T | any): (element: T, index?: number) => boolean; not(predicate: (element: T, index?: number) => boolean = defaultExistsPredicate): (element: T, index?: number) => boolean; not(predicate: string | number | symbol | T | any): (element: T, index?: number) => boolean; equality(value: TOther, comparer: (element: T, other: TOther) => boolean = defaultEqualityComparer): (element: T, index?: number) => boolean; equality(value: TOther, comparer: string | number | symbol): (element: T, index?: number) => boolean; strict(value: T): (element: T, index?: number) => boolean; same(value: T): (element: T, index?: number) => boolean; regexp(regexp: RegExp): (element: string, index?: number) => boolean; regexp(regexp: RegExp, keySelector: (element: T, index?: number) => string = defaultSelector): (element: T, index?: number) => boolean; regexp(regexp: RegExp, keySelector: string | number | symbol): (element: T, index?: number) => boolean; }; export interface IEnumerable { readonly length: number; readonly size: number; where(predicate: (element: T, index?: number) => boolean = defaultPredicate): IEnumerable; where(predicate: string | number | symbol | T | any): IEnumerable; select(selector: (element: T, index?: number) => TResult = defaultSelector): IEnumerable; select(selector: string | number | symbol): IEnumerable; aggregate(seed: TSeed, func: (seed: TSeed, element: T, index?: number) => TSeed, resultSelector: (result: TSeed) => TResult = defaultSelector): TResult; aggregate(seed: TSeed, func: (seed: TSeed, element: T, index?: number) => TSeed, resultSelector: string | number | symbol): TResult; all(predicate: (element: T, index?: number) => boolean = defaultPredicate): boolean; all(predicate: string | number | symbol | T | any): boolean; any(): boolean; any(predicate: (element: T, index?: number) => boolean = defaultPredicate): boolean; any(predicate: string | number | symbol | T | any): boolean; asEnumerable(): IEnumerable; asEnumerable(childrenSelector: (element: T, index?: number) => T[] | IEnumerable, valueSelector: (element: TValue, index?: number) => TValue = defaultValueSelector): ITree; asEnumerable(childrenSelector: (element: T, index?: number) => T[] | IEnumerable, valueSelector: string | number | symbol): ITree; asEnumerable(childrenSelector: string | number | symbol, valueSelector: (element: TValue, index?: number) => TValue = defaultValueSelector): ITree; asEnumerable(childrenSelector: string | number | symbol, valueSelector: string | number | symbol): ITree; average(selector: (element: T, index?: number) => number = defaultSelector): number; average(selector: string | number | symbol): number; chunk(chunk, offset = 0): IEnumerable>; split(splitPredicate: (element: T, index?: number) => boolean = defaultFalsePredicate): IEnumerable>; split(splitPredicate: string | number | symbol | T | RegExp | any): IEnumerable>; nearSplit(splitPredicate: (element: T, index?: number) => boolean = defaultFalsePredicate): IEnumerable>; nearSplit(splitPredicate: string | number | symbol | T | RegExp | any): IEnumerable>; concat(...other: T[][]): IEnumerable; concat(...other: T[]): IEnumerable; concat(...other: IEnumerable[]): IEnumerable; contains(value: T): boolean; contains(value: TOther, comparer: (element: T, other: TOther) => boolean = defaultEqualityComparer): boolean; contains(value: TOther, comparer: string | number | symbol): boolean; copyWithin(target: number = 0, start: number = 0, end: number = Number.POSITIVE_INFINITY): IEnumerable; count(predicate: (element: T, index?: number) => boolean = defaultPredicate): number; count(predicate: string | number | symbol | T | any): number; proportion(predicate: (element: T, index?: number) => boolean = defaultPredicate): number; proportion(predicate: string | number | symbol | T | any): number; defaultIfEmpty(defaultValue?: T): IEnumerable; distinct(comparer: (element: T, other: T) => boolean = defaultEqualityComparer): IEnumerable; distinct(comparer: string | number | symbol): IEnumerable; elementAt(index: number): T; elementAtOrDefault(index: number, defaultValue: T): T; every(callback: (element: T, index?: number, source?: IEnumerable) => boolean, thisArg?: any): boolean; except(other: TOther[] | IEnumerable, comparer: (element: T, other: TOther) => boolean = defaultEqualityComparer): IEnumerable; except(other: TOther[] | IEnumerable, comparer: string | number | symbol): IEnumerable; fill(value: T, start: number = 0, end: number = Number.POSITIVE_INFINITY); filter(callback: (element: T, index?: number, source?: IEnumerable) => TResult, thisArg?: any): IEnumerable; find(callback: (element: T, index?: number, source?: IEnumerable) => boolean, thisArg?: any): T; findIndex(callback: (element: T, index?: number, source?: IEnumerable) => boolean, thisArg?: any): number; findLast(callback: (element: T, index?: number, source?: IEnumerable) => boolean, thisArg?: any): T; findLastIndex(callback: (element: T, index?: number, source?: IEnumerable) => boolean, thisArg?: any): number; first(predicate: (element: T, index?: number) => boolean = defaultPredicate): T; first(predicate: string | number | symbol | T | any): T; firstOrDefault(defaultValue: T, predicate: (element: T, index?: number) => boolean = defaultPredicate): T; firstOrDefault(defaultValue: T, predicate: string | number | symbol | T | any): T; forEach(action: (element: T, index?: number, source?: IEnumerable) => void, thisArg?: any): void; each(action: (element: T, index?: number) => void): IEnumerable; indices(indices: number[] | IEnumerable): IEnumerable; permutation(count: number, repeatable: boolean = false): IEnumerable>; combination(count: number, repeatable: boolean = false): IEnumerable>; groupBy(keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; groupBy(keySelector: string | number | symbol, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; groupBy(keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; groupBy(keySelector: string | number | symbol, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; groupBy(keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; groupBy(keySelector: string | number | symbol, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; groupBy(keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; groupBy(keySelector: string | number | symbol, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; groupJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; groupJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; groupJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; groupJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; groupJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; groupJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; groupJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; groupJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; includes(element: T, start: number = 0): boolean; indexOf(element: TOther, start: number = 0, comparer: (element: T, other: TOther) => boolean = defaultStrictEqualityComparer): number; indexOf(element: TOther, start: number = 0, comparer: string | number | symbol): number; lastIndexOf(element: TOther, start: number = 0, comparer: (element: T, other: TOther) => boolean = defaultStrictEqualityComparer): number; lastIndexOf(element: TOther, start: number = 0, comparer: string | number | symbol): number; innerJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; innerJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; innerJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; innerJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; innerJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; innerJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; innerJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; innerJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; intersect(other: TOther[] | IEnumerable, comparer: (element: T, other: TOther) => boolean = defaultEqualityComparer): IEnumerable; intersect(other: TOther[] | IEnumerable, comparer: string | number | symbol): IEnumerable; join(split: string): string; join(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; join(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; join(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; join(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; join(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; join(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; join(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; join(inner: TInner[] | IEnumerable, resultSelector: (element: T, other: TInner) => TResult, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; last(predicate: (element: T, index: number) => boolean = defaultPredicate): T; last(predicate: string | number | symbol | T | any): T; lastOrDefault(defaultValue: T, predicate: (element: T, index: number) => boolean = defaultPredicate): T; lastOrDefault(defaultValue: T, predicate: string | number | symbol | T | any): T; leftJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; leftJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; leftJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; leftJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; leftJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; leftJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; leftJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; leftJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; rightJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; rightJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; rightJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; rightJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: (key: TOuterKey, other: TInnerKey) => boolean = defaultEqualityComparer): IEnumerable; rightJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; rightJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: (element: TInner, index?: number) => TInnerKey = defaultKeySelector, comparer: string | number | symbol): IEnumerable; rightJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: (element: T, index?: number) => TOuterKey = defaultKeySelector, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; rightJoin(inner: TInner[] | IEnumerable, resultSelector: (element: T, grouping: IGrouping) => TResult = defaultJoinSelector, outerKeySelect: string | number | symbol, innerKeySelect: string | number | symbol, comparer: string | number | symbol): IEnumerable; leftPad(length: number, value: T): IEnumerable; rightPad(length: number, value: T): IEnumerable; map(callback: (element: T, index?: number, source?: IEnumerable) => TOther, thisArg?: any): IEnumerable; max(selector: (element: T, index?: number) => number = defaultSelector): T; max(selector: (element: T, index?: number) => string): T; max(selector: string | number | symbol): T; max(selector: (element: T, index?: number) => TResult, comparer: (element: TResult, other: TResult) => number): T; max(selector: string | number | symbol, comparer: (element: TResult, other: TResult) => number): T; max(selector: (element: T, index?: number) => TResult, comparer: string | number | symbol): T; max(selector: string | number | symbol, comparer: string | number | symbol): T; maxIndex(selector: (element: T, index?: number) => number = defaultSelector): number; maxIndex(selector: (element: T, index?: number) => string): number; maxIndex(selector: string | number | symbol): number; maxIndex(selector: (element: T, index?: number) => TResult, comparer: (element: TResult, other: TResult) => number): number; maxIndex(selector: string | number | symbol, comparer: (element: TResult, other: TResult) => number): number; maxIndex(selector: (element: T, index?: number) => TResult, comparer: string | number | symbol): number; maxIndex(selector: string | number | symbol, comparer: string | number | symbol): number; maxOrDefault(defaultValue: T, selector: (element: T, index?: number) => number = defaultSelector): T; maxOrDefault(defaultValue: T, selector: (element: T, index?: number) => string): T; maxOrDefault(defaultValue: T, selector: string | number | symbol): T; maxOrDefault(defaultValue: T, selector: (element: T, index?: number) => TResult, comparer: (element: TResult, other: TResult) => number): T; maxOrDefault(defaultValue: T, selector: string | number | symbol, comparer: (element: TResult, other: TResult) => number): T; maxOrDefault(defaultValue: T, selector: (element: T, index?: number) => TResult, comparer: string | number | symbol): T; maxOrDefault(defaultValue: T, selector: string | number | symbol, comparer: string | number | symbol): T; min(selector: (element: T, index?: number) => number = defaultSelector): T; min(selector: (element: T, index?: number) => string): T; min(selector: string | number | symbol): T; min(selector: (element: T, index?: number) => TResult, comparer: (element: TResult, other: TResult) => number): T; min(selector: string | number | symbol, comparer: (element: TResult, other: TResult) => number): T; min(selector: (element: T, index?: number) => TResult, comparer: string | number | symbol): T; min(selector: string | number | symbol, comparer: string | number | symbol): T; minIndex(selector: (element: T, index?: number) => number = defaultSelector): number; minIndex(selector: (element: T, index?: number) => string): number; minIndex(selector: string | number | symbol): number; minIndex(selector: (element: T, index?: number) => TResult, comparer: (element: TResult, other: TResult) => number): number; minIndex(selector: string | number | symbol, comparer: (element: TResult, other: TResult) => number): number; minIndex(selector: (element: T, index?: number) => TResult, comparer: string | number | symbol): number; minIndex(selector: string | number | symbol, comparer: string | number | symbol): number; minOrDefault(defaultValue: T, selector: (element: T, index?: number) => number = defaultSelector): T; minOrDefault(defaultValue: T, selector: (element: T, index?: number) => string): T; minOrDefault(defaultValue: T, selector: string | number | symbol): T; minOrDefault(defaultValue: T, selector: (element: T, index?: number) => TResult, comparer: (element: TResult, other: TResult) => number): T; minOrDefault(defaultValue: T, selector: string | number | symbol, comparer: (element: TResult, other: TResult) => number): T; minOrDefault(defaultValue: T, selector: (element: T, index?: number) => TResult, comparer: string | number | symbol): T; minOrDefault(defaultValue: T, selector: string | number | symbol, comparer: string | number | symbol): T; ofType(type: string): IEnumerable; ofType(type: any): IEnumerable; orderBy(keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; orderBy(keySelector: string | number | symbol, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; orderBy(keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: string | number | symbol): IOrderedEnumerable; orderBy(keySelector: string | number | symbol, comparer: string | number | symbol): IOrderedEnumerable; orderByDescending(keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; orderByDescending(keySelector: string | number | symbol, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; orderByDescending(keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: string | number | symbol): IOrderedEnumerable; orderByDescending(keySelector: string | number | symbol, comparer: string | number | symbol): IOrderedEnumerable; pop(): T; product(selector: (element: T, index?: number) => number = defaultSelector): number; product(selector: string | number | symbol): number; push(...values: T[]): number; rand(count: number): IEnumerable; random(): T; randomOrDefault(defaultValue: T): T; randomProbability(probabilitySelector: (element: T, index?: number) => number = defaultSelector): T; randomProbability(probabilitySelector: string | number | symbol): T; randomIndexProbability(probabilitySelector: (element: T, index?: number) => number = defaultSelector): number; randomIndexProbability(probabilitySelector: string | number | symbol): number; randomProbabilityOrDefault(defaultValue: T, probabilitySelector: (element: T, index?: number) => number = defaultSelector): T; randomProbabilityOrDefault(defaultValue: T, probabilitySelector: string | number | symbol): T; reduce(callback: (seed: TSeed, element: T, index?: number) => TSeed, initialValue: TSeed): TSeed; reduceRight(callback: (seed: TSeed, element: T, index?: number) => TSeed, initialValue: TSeed): TSeed; reverse(): IEnumerable; selectMany(collectionSelector: (element: T, index?: number) => TElement[] | IEnumerable = defaultSelector, resultSelector: (sourceElement: T, collectionElement: TElement) => TResult = defaultResultSelector): IEnumerable; selectMany(collectionSelector: string | number | symbol, resultSelector: (sourceElement: T, collectionElement: TElement) => TResult = defaultResultSelector): IEnumerable; sequenceEqual(other: TOther[] | IEnumerable, comparer: (element: T, other: TOther) => boolean = defaultEqualityComparer): boolean; sequenceEqual(other: TOther[] | IEnumerable, comparer: string | number | symbol): boolean; shift(): T; single(predicate: (element: T, index?: number) => boolean = defaultPredicate): T; single(predicate: string | number | symbol | T | any): T; singleOrDefault(defaultValue: T, predicate: (element: T, index?: number) => boolean = defaultPredicate): T; singleOrDefault(defaultValue: T, predicate: string | number | symbol | T | any): T; skip(count: number): IEnumerable; skipWhile(predicate: (element: T, index?: number) => boolean): IEnumerable; skipWhile(predicate: string | number | symbol | T | any): IEnumerable; skipSame(comparer: (element: T, other: T) => boolean = defaultSameComparer): IEnumerable; skipSame(comparer: string | number | symbol): IEnumerable; skipProportion(proportion: number): IEnumerable; take(count: number): IEnumerable; takeWhile(predicate: (element: T, index?: number) => boolean): IEnumerable; takeWhile(predicate: string | number | symbol | T | any): IEnumerable; takeSame(comparer: (element: T, other: T) => boolean = defaultSameComparer): IEnumerable; takeSame(comparer: string | number | symbol): IEnumerable; takeProportion(proportion: number): IEnumerable; slice(start: number, end: number): IEnumerable; some(callback: (element: T, index?: number, source?: IEnumerable) => boolean, thisArg?: any): boolean; sort(comparer: (element: T, other: T) => number = defaultComparer): IEnumerable; sort(comparer: string | number | symbol): IEnumerable; sum(selector: (element: T, index?: number) => number = defaultSelector): number; sum(selector: string | number | symbol): number; union(other: T[] | IEnumerable, comparer: (element: T, other: T) => boolean = defaultEqualityComparer): IEnumerable; union(other: T[] | IEnumerable, comparer: string | number | symbol): IEnumerable; unshift(...values: T[]): number; zip(other: TOther[] | IEnumerable, resultSelector: (element: T, other: TOther) => TResult): IEnumerable; wipe(predicate: (element: T, index?: number) => boolean = defaultPredicate, count: number = 0): IEnumerable; wipe(predicate: string | number | symbol | T | any, count: number = 0): IEnumerable; nearBy(keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; nearBy(keySelector: string | number | symbol, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; nearBy(keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; nearBy(keySelector: string | number | symbol, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; nearBy(keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; nearBy(keySelector: string | number | symbol, elementSelector: (element: T, index?: number) => TElement = defaultValueSelector, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; nearBy(keySelector: (element: T, index?: number) => TKey = defaultKeySelector, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; nearBy(keySelector: string | number | symbol, elementSelector: string | number | symbol, resultSelector: (key: TKey, grouping: IGrouping) => TResult = defaultResultSelector, comparer: string | number | symbol): IEnumerable>; separate(childrenSelector: (element: T) => T[] | IEnumerable = defaultChildrenSelector, valueSelector: (element: T) => TResult = defaultValueSelector): IEnumerable; separate(childrenSelector: string | number | symbol, valueSelector: (element: T) => TResult = defaultValueSelector): IEnumerable; separate(childrenSelector: (element: T) => T[] | IEnumerable = defaultChildrenSelector, valueSelector: string | number | symbol): IEnumerable; separate(childrenSelector: string | number | symbol, valueSelector: string | number | symbol): IEnumerable; combine(parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: (element: T) => TValue = defaultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; combine(parentSelector: string | number | symbol, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: (element: T) => TValue = defaultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; combine(parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: string | number | symbol, valueSelector: (element: T) => TValue = defaultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; combine(parentSelector: string | number | symbol, keySelector: string | number | symbol, valueSelector: (element: T) => TValue = defaultSelector, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; combine(parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: string | number | symbol, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; combine(parentSelector: string | number | symbol, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: string | number | symbol, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; combine(parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; combine(parentSelector: string | number | symbol, keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: (key: TKey, other: TKey) => boolean = defaultEqualityComparer): IEnumerable>; combine(parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: (element: T) => TValue = defaultSelector, comparer: string | number | symbol): IEnumerable>; combine(parentSelector: string | number | symbol, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: (element: T) => TValue = defaultSelector, comparer: string | number | symbol): IEnumerable>; combine(parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: string | number | symbol, valueSelector: (element: T) => TValue = defaultSelector, comparer: string | number | symbol): IEnumerable>; combine(parentSelector: string | number | symbol, keySelector: string | number | symbol, valueSelector: (element: T) => TValue = defaultSelector, comparer: string | number | symbol): IEnumerable>; combine(parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: string | number | symbol, comparer: string | number | symbol): IEnumerable>; combine(parentSelector: string | number | symbol, keySelector: (element: T) => TKey = defaultKeySelector, valueSelector: string | number | symbol, comparer: string | number | symbol): IEnumerable>; combine(parentSelector: (element: T) => TKey = defaultParentSelector, keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: string | number | symbol): IEnumerable>; combine(parentSelector: string | number | symbol, keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: string | number | symbol): IEnumerable>; isSub(other: T[] | IEnumerable, comparer: (element: T, other: T) => boolean): boolean; isSub(other: T[] | IEnumerable, comparer: string | number | symbol): boolean; isSuper(other: T[] | IEnumerable, comparer: (element: T, other: T) => boolean): boolean; isSuper(other: T[] | IEnumerable, comparer: string | number | symbol): boolean; symmetric(other: T[] | IEnumerable, comparer: (element: T, other: T) => boolean): IEnumerable; symmetric(other: T[] | IEnumerable, comparer: string | number | symbol): IEnumerable; toArray(): T[]; toDirectory(keySelector: (element: T, index?: number) => TKey, valueSelector: (element: T, index?: number) => TValue, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Directory; toDirectory(keySelector: string | number | symbol, valueSelector: (element: T, index?: number) => TValue, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Directory; toDirectory(keySelector: (element: T, index?: number) => TKey, valueSelector: string | number | symbol, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Directory; toDirectory(keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Directory; toDirectory(keySelector: (element: T, index?: number) => TKey, valueSelector: (element: T, index?: number) => TValue, comparer: string | number | symbol) : Directory; toDirectory(keySelector: string | number | symbol, valueSelector: (element: T, index?: number) => TValue, comparer: string | number | symbol) : Directory; toDirectory(keySelector: (element: T, index?: number) => TKey, valueSelector: string | number | symbol, comparer: string | number | symbol) : Directory; toDirectory(keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: string | number | symbol) : Directory; toLookup(keySelector: (element: T, index?: number) => TKey, valueSelector: (element: T, index?: number) => TValue, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Lookup; toLookup(keySelector: string | number | symbol, valueSelector: (element: T, index?: number) => TValue, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Lookup; toLookup(keySelector: (element: T, index?: number) => TKey, valueSelector: string | number | symbol, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Lookup; toLookup(keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: (element: TKey, other: TKey) => boolean = defaultSameComparer) : Lookup; toLookup(keySelector: (element: T, index?: number) => TKey, valueSelector: (element: T, index?: number) => TValue, comparer: string | number | symbol) : Lookup; toLookup(keySelector: string | number | symbol, valueSelector: (element: T, index?: number) => TValue, comparer: string | number | symbol) : Lookup; toLookup(keySelector: (element: T, index?: number) => TKey, valueSelector: string | number | symbol, comparer: string | number | symbol) : Lookup; toLookup(keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: string | number | symbol) : Lookup; toObject(keySelector: (element: T, index?: number) => string, valueSelector: (element: T, index?: number) => TValue, comparer: (element: string, other: string) => boolean = defaultSameComparer) : object; toObject(keySelector: string | number | symbol, valueSelector: (element: T, index?: number) => TValue, comparer: (element: string, other: string) => boolean = defaultSameComparer) : object; toObject(keySelector: (element: T, index?: number) => string, valueSelector: string | number | symbol, comparer: (element: string, other: string) => boolean = defaultSameComparer) : object; toObject(keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: (element: string, other: string) => boolean = defaultSameComparer) : object; toObject(keySelector: (element: T, index?: number) => string, valueSelector: (element: T, index?: number) => TValue, comparer: string | number | symbol) : object; toObject(keySelector: string | number | symbol, valueSelector: (element: T, index?: number) => TValue, comparer: string | number | symbol) : object; toObject(keySelector: (element: T, index?: number) => string, valueSelector: string | number | symbol, comparer: string | number | symbol) : object; toObject(keySelector: string | number | symbol, valueSelector: string | number | symbol, comparer: string | number | symbol) : object; toPreOrder(): BinaryTree; toInOrder(): BinaryTree; toPostOrder(): BinaryTree; getEnumerator(): IEnumerator; } export interface IEnumerator { current: T; moveNext(): boolean; reset(): void; } export class Entry { readonly key: TKey; readonly value: TValue; } export interface IMapEnumerable extends IEnumerable> { forEach(action: (element: TValue, key: TKey, source: IMapEnumerable) => void, thisArg?: any): void; } export interface Directory extends IMapEnumerable { delete(key: TKey, comparer: (element: TKey, other: TKey) => boolean): boolean; get(key: TKey, comparer: (element: TKey, other: TKey) => boolean): TValue; has(key: TKey, comparer: (element: TKey, other: TKey) => boolean): boolean; set(key: TKey, value: TValue, comparer: (element: TKey, other: TKey) => boolean): Directory; } export interface Lookup extends Directory> { set(key: TKey, value: IEnumerable, comparer: (element: TKey, other: TKey) => boolean): Lookup; } export interface IOrderedEnumerable extends IEnumerable { thenBy(keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; thenBy(keySelector: string | number | symbol, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; thenBy(keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: string | number | symbol): IOrderedEnumerable; thenBy(keySelector: string | number | symbol, comparer: string | number | symbol): IOrderedEnumerable; thenByDescending(keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; thenByDescending(keySelector: string | number | symbol, comparer: (element: T, other: T) => number = defaultComparer): IOrderedEnumerable; thenByDescending(keySelector: (element: T, index?: number) => TKey = defaultSelector, comparer: string | number | symbol): IOrderedEnumerable; thenByDescending(keySelector: string | number | symbol, comparer: string | number | symbol): IOrderedEnumerable; } export interface IGrouping extends IEnumerable { readonly key: TKey } export interface IChunk extends IEnumerable { readonly index: number; } export interface ITree extends IEnumerable> { readonly value: TValue; readonly children: IEnumerable>; readonly values: IEnumerable; getChild(index: number): ITree; getValue(index: number): TValue; breadthTraverse(): IEnumerable; breadthSearch(predicate: (element: TValue) => boolean = defaultPredicate): IEnumerable; breadthSearch(predicate: string | number | symbol | TValue | any): IEnumerable; breadthSubTree(predicate: (element: TValue) => boolean): IEnumerable>; breadthSubTree(predicate: string | number | symbol | TValue | any): IEnumerable>; depthTraverse(): IEnumerable; depthSearch(predicate: (element: TValue) => boolean = defaultPredicate): IEnumerable; depthSearch(predicate: string | number | symbol | TValue | any): IEnumerable; depthSubTree(predicate: (element: TValue) => boolean): IEnumerable>; depthSubTree(predicate: string | number | symbol | TValue | any): IEnumerable>; lowestAncestor(...nodes: (ITree | TValue)[]): TValue; isChildOf(root: ITree): boolean; isParentOf(node: ITree | TValue): boolean; isDescendantOf(root: ITree): boolean; isAncestorOf(node: ITree | TValue): boolean; path(root: ITree): IEnumerable; pathTo(node: ITree | TValue): IEnumerable; pathNodes(root: ITree): IEnumerable>; pathNodesTo(node: ITree | TValue): IEnumerable>; getParent(node: ITree | TValue): TValue; getParentNode(node: ITree | TValue): ITree; prev(node: ITree | TValue, predicate = defaultPredicate): TValue; next(node: ITree | TValue, predicate = defaultPredicate): TValue; prevAll(node: ITree | TValue, predicate = defaultPredicate): IEnumerable; nextAll(node: ITree | TValue, predicate = defaultPredicate): IEnumerable; siblings(node: ITree | TValue, predicate = defaultPredicate): IEnumerable; prevNode(node: ITree | TValue, predicate = defaultPredicate): ITree; nextNode(node: ITree | TValue, predicate = defaultPredicate): ITree; prevAllNodes(node: ITree | TValue, predicate = defaultPredicate): IEnumerable>; nextAllNodes(node: ITree | TValue, predicate = defaultPredicate): IEnumerable>; siblingNodes(node: ITree | TValue, predicate = defaultPredicate): IEnumerable>; degree(predicate: (element: TValue) => boolean = defaultPredicate): number; degree(predicate: string | number | symbol | TValue | any): number; depth(predicate: (element: TValue) => boolean = defaultPredicate): number; depth(predicate: string | number | symbol | TValue | any): number; isBinary(): boolean; isFullBinary(): boolean; isCompleteBinary(): boolean; isPerfectBinary(): boolean; asBinary(): BinaryTree; toValue(childrenSetter: (obj: object, children: object[]) => void = defaultChildrenSetter, valueSetter: (obj: object, value: TValue) => void = defaultValueSetter): object; toValue(childrenSetter: string | number | symbol, valueSetter: (obj: object, value: TValue) => void = defaultValueSetter): object; toValue(childrenSetter: (obj: object, children: object[]) => void = defaultChildrenSetter, valueSetter: string | number | symbol): object; toValue(childrenSetter: string | number | symbol, valueSetter: string | number | symbol): object; } export interface BinaryTree extends ITree { readonly left: BinaryTree; readonly right: BinaryTree; hasLeft(): boolean; hasRight(): boolean; preOrder(): IEnumerable; inOrder(): IEnumerable; postOrder(): IEnumerable; } export interface ICombine extends IEnumerable>, ITree { readonly key: TKey; readonly parent: TKey; readonly children: IEnumerable>; } class Plugin { name: string; value: (source: IEnumerable<>, ...params: any[]) => any } } export = Enumerable; export as namespace Enumerable;