declare namespace Enumerable { export let Utils: { createLambda(expression: null): (x: unknown) => unknown; createLambda(expression: string): ((...params: unknown[]) => unknown); createLambda(expression?: T): T; createEnumerable(getEnumerator: () => IEnumerator): IEnumerable; createEnumerator(initialize: () => void, tryGetNext: () => boolean, dispose: () => void): IEnumerator; extendTo(type: unknown): void; recallFrom(type: unknown): void; hasNativeIteratorSupport(): boolean; } export function choice(...params: T[]): IEnumerable; export function cycle(...params: T[]): IEnumerable; export function empty(): IEnumerable; export function from(): IEnumerable; export function from(obj: IEnumerable): IEnumerable; export function from(obj: number): IEnumerable; export function from(obj: boolean): IEnumerable; export function from(obj: string): IEnumerable; export function from(obj: T[]): IEnumerable; export function from(obj: Iterator): IEnumerable; export function from(obj: { length: number;[x: number]: T; }): IEnumerable; export function from(obj: Record): IEnumerable<{ key: K; value: T }>; export function make(element: T): IEnumerable; export function matches(input: string, pattern: RegExp): IEnumerable; export function matches(input: string, pattern: string, flags?: string): IEnumerable; export function range(start: number, count: number, step?: number): IEnumerable; export function rangeDown(start: number, count: number, step?: number): IEnumerable; export function rangeTo(start: number, to: number, step?: number): IEnumerable; export function repeat(element: T, count?: number): IEnumerable; export function repeatWithFinalize(initializer: () => T, finalizer: (element: T) => void): IEnumerable; export function generate(func: () => T, count?: number): IEnumerable; export function toInfinity(start?: number, step?: number): IEnumerable; export function toNegativeInfinity(start?: number, step?: number): IEnumerable; export function unfold(seed: T, func: (value: T) => T): IEnumerable; export function defer(enumerableFactory: () => IEnumerable): IEnumerable; export interface IEnumerable { (getEnumerator: () => IEnumerator): void; getEnumerator(): IEnumerator; [Symbol.iterator](): Iterator; // Extension Methods traverseBreadthFirst(childrenSelector: (element: T) => IEnumerable): IEnumerable; traverseBreadthFirst(childrenSelector: (element: T) => IEnumerable, resultSelector: (element: T, nestLevel: number) => TResult): IEnumerable; traverseDepthFirst(childrenSelector: (element: T) => IEnumerable, resultSelector?: (element: T, nestLevel: number) => TResult): IEnumerable; flatten(): IEnumerable; pairwise(selector: (prev: T, current: T) => TResult): IEnumerable; scan(func: (prev: T, current: T) => T): IEnumerable; scan(seed: TAccumulate, func: (prev: TAccumulate, current: T) => TAccumulate): IEnumerable; select(selector: (element: T, index: number) => TResult): IEnumerable; selectMany(collectionSelector: (element: T, index: number) => IEnumerable): IEnumerable; selectMany(collectionSelector: (element: T, index: number) => IEnumerable, resultSelector: (outer: T, inner: TCollection) => TResult): IEnumerable; selectMany(collectionSelector: (element: T, index: number) => TOther[]): IEnumerable; selectMany(collectionSelector: (element: T, index: number) => TCollection[], resultSelector: (outer: T, inner: TCollection) => TResult): IEnumerable; selectMany(collectionSelector: (element: T, index: number) => { length: number;[x: number]: TOther; }): IEnumerable; selectMany(collectionSelector: (element: T, index: number) => { length: number;[x: number]: TCollection; }, resultSelector: (outer: T, inner: TCollection) => TResult): IEnumerable; where(predicate: (element: T, index: number) => element is TOther): IEnumerable; where(predicate: (element: T, index: number) => boolean): IEnumerable; choose(selector: (element: T, index: number) => T): IEnumerable; ofType(type: unknown): IEnumerable; zip(second: IEnumerable, resultSelector: (first: T, second: U, index: number) => TResult): IEnumerable; zip(second: { length: number;[x: number]: U; }, resultSelector: (first: T, second: U, index: number) => TResult): IEnumerable; zip(second: U[], resultSelector: (first: T, second: U, index: number) => TResult): IEnumerable; zip(...params: unknown[]): IEnumerable; // last one is selector merge(...params: (T[] | IEnumerable | { length: number;[x: number]: T; })[]): IEnumerable; join(inner: IEnumerable, outerKeySelector: (outer: T) => TKey, innerKeySelector: (inner: TInner) => TKey, resultSelector: (outer: T, inner: TInner) => TResult, compareSelector?: (obj: T) => TKey): IEnumerable; join(inner: { length: number;[x: number]: TInner; }, outerKeySelector: (outer: T) => TKey, innerKeySelector: (inner: TInner) => TKey, resultSelector: (outer: T, inner: TInner) => TResult, compareSelector?: (obj: T) => TKey): IEnumerable; join(inner: TInner[], outerKeySelector: (outer: T) => TKey, innerKeySelector: (inner: TInner) => TKey, resultSelector: (outer: T, inner: TInner) => TResult, compareSelector?: (obj: T) => TKey): IEnumerable; leftJoin(inner: IEnumerable, outerKeySelector: (outer: T) => TKey, innerKeySelector: (inner: TInner) => TKey, resultSelector: (outer: T, inner: TInner) => TResult, compareSelector?: (obj: T) => TKey): IEnumerable; leftJoin(inner: { length: number;[x: number]: TInner; }, outerKeySelector: (outer: T) => TKey, innerKeySelector: (inner: TInner) => TKey, resultSelector: (outer: T, inner: TInner) => TResult, compareSelector?: (obj: T) => TKey): IEnumerable; leftJoin(inner: TInner[], outerKeySelector: (outer: T) => TKey, innerKeySelector: (inner: TInner) => TKey, resultSelector: (outer: T, inner: TInner) => TResult, compareSelector?: (obj: T) => TKey): IEnumerable; groupJoin(inner: IEnumerable, outerKeySelector: (outer: T) => TKey, innerKeySelector: (inner: TInner) => TKey, resultSelector: (outer: T, inner: IEnumerable) => TResult, compareSelector?: (obj: T) => TKey): IEnumerable; groupJoin(inner: { length: number;[x: number]: TInner; }, outerKeySelector: (outer: T) => TKey, innerKeySelector: (inner: TInner) => TKey, resultSelector: (outer: T, inner: IEnumerable) => TResult, compareSelector?: (obj: T) => TKey): IEnumerable; groupJoin(inner: TInner[], outerKeySelector: (outer: T) => TKey, innerKeySelector: (inner: TInner) => TKey, resultSelector: (outer: T, inner: IEnumerable) => TResult, compareSelector?: (obj: T) => TKey): IEnumerable; all(predicate: (element: T) => boolean): boolean; any(predicate?: (element: T) => boolean): boolean; isEmpty(): boolean; concat(...sequences: (T[] | IEnumerable | { length: number;[x: number]: T; })[]): IEnumerable; insert(index: number, second: IEnumerable): IEnumerable; insert(index: number, second: { length: number;[x: number]: T; }): IEnumerable; alternate(alternateValue: T): IEnumerable; alternate(alternateSequence: { length: number;[x: number]: T; }): IEnumerable; alternate(alternateSequence: IEnumerable): IEnumerable; alternate(alternateSequence: T[]): IEnumerable; contains(value: T): boolean; contains(value: T, compareSelector?: (element: T) => TCompare): boolean; defaultIfEmpty(defaultValue?: T): IEnumerable; distinct(): IEnumerable; distinct(compareSelector: (element: T) => TCompare): IEnumerable; distinctUntilChanged(): IEnumerable; distinctUntilChanged(compareSelector: (element: T) => TCompare): IEnumerable; except(second: { length: number;[x: number]: T; }): IEnumerable; except(second: { length: number;[x: number]: T; }, compareSelector: (element: T) => TCompare): IEnumerable; except(second: IEnumerable): IEnumerable; except(second: IEnumerable, compareSelector: (element: T) => TCompare): IEnumerable; except(second: T[]): IEnumerable; except(second: T[], compareSelector: (element: T) => TCompare): IEnumerable; intersect(second: { length: number;[x: number]: T; }): IEnumerable; intersect(second: { length: number;[x: number]: T; }, compareSelector: (element: T) => TCompare): IEnumerable; intersect(second: IEnumerable): IEnumerable; intersect(second: IEnumerable, compareSelector: (element: T) => TCompare): IEnumerable; intersect(second: T[]): IEnumerable; intersect(second: T[], compareSelector: (element: T) => TCompare): IEnumerable; union(second: { length: number;[x: number]: T; }): IEnumerable; union(second: { length: number;[x: number]: T; }, compareSelector: (element: T) => TCompare): IEnumerable; union(second: IEnumerable): IEnumerable; union(second: IEnumerable, compareSelector: (element: T) => TCompare): IEnumerable; union(second: T[]): IEnumerable; union(second: T[], compareSelector: (element: T) => TCompare): IEnumerable; sequenceEqual(second: { length: number;[x: number]: T; }): boolean; sequenceEqual(second: { length: number;[x: number]: T; }, compareSelector: (element: T) => TCompare): boolean; sequenceEqual(second: IEnumerable): boolean; sequenceEqual(second: IEnumerable, compareSelector: (element: T) => TCompare): boolean; sequenceEqual(second: T[]): boolean; sequenceEqual(second: T[], compareSelector: (element: T) => TCompare): boolean; orderBy(keySelector: (element: T) => TKey): IOrderedEnumerable; orderBy(keySelector: (element: T) => TKey, comparer: (first: TKey, second: TKey) => number): IOrderedEnumerable; orderByDescending(keySelector: (element: T) => TKey): IOrderedEnumerable; orderByDescending(keySelector: (element: T) => TKey, comparer: (first: TKey, second: TKey) => number): IOrderedEnumerable; reverse(): IEnumerable; shuffle(): IEnumerable; weightedSample(weightSelector: (element: T) => number): IEnumerable; groupBy(keySelector: (element: T) => TKey): IEnumerable>; groupBy(keySelector: (element: T) => TKey, elementSelector: (element: T) => TElement): IEnumerable>; groupBy(keySelector: (element: T) => TKey, elementSelector: (element: T) => TElement, resultSelector: (key: TKey, element: IEnumerable) => TResult): IEnumerable; groupBy(keySelector: (element: T) => TKey, elementSelector: (element: T) => TElement, resultSelector: (key: TKey, element: IEnumerable) => TResult, compareSelector: (element: TKey) => TCompare): IEnumerable; partitionBy(keySelector: (element: T) => TKey): IEnumerable>; partitionBy(keySelector: (element: T) => TKey, elementSelector: (element: T) => TElement): IEnumerable>; partitionBy(keySelector: (element: T) => TKey, elementSelector: (element: T) => TElement, resultSelector: (key: TKey, element: IEnumerable) => TResult): IEnumerable; partitionBy(keySelector: (element: T) => TKey, elementSelector: (element: T) => TElement, resultSelector: (key: TKey, element: IEnumerable) => TResult, compareSelector: (element: TKey) => TCompare): IEnumerable; buffer(count: number): IEnumerable; aggregate(func: (prev: T, current: T) => T): T; aggregate(seed: TAccumulate, func: (prev: TAccumulate, current: T) => TAccumulate): TAccumulate; aggregate(seed: TAccumulate, func: (prev: TAccumulate, current: T) => TAccumulate, resultSelector: (last: TAccumulate) => TResult): TResult; average(selector?: (element: T) => number): number; count(predicate?: (element: T, index: number) => boolean): number; max(selector?: (element: T) => number): number; min(selector?: (element: T) => number): number; maxBy(keySelector: (element: T) => TKey): T; minBy(keySelector: (element: T) => TKey): T; sum(selector?: (element: T) => number): number; elementAt(index: number): T; elementAtOrDefault(index: number, defaultValue?: T): T | undefined; first(predicate: (element: T, index: number) => element is TOther): TOther; first(predicate?: (element: T, index: number) => boolean): T; firstOrDefault(predicate: (element: T, index: number) => element is TOther, defaultValue: TDefault): TOther | TDefault; firstOrDefault(predicate: (element: T, index: number) => boolean, defaultValue: TDefault): T | TDefault; firstOrDefault(predicate: (element: T, index: number) => element is TOther): TOther | undefined; firstOrDefault(predicate: (element: T, index: number) => boolean): T | undefined; firstOrDefault(defaultValue: TDefault): T | TDefault; firstOrDefault(): T | undefined; last(predicate: (element: T, index: number) => element is TOther): TOther; last(predicate?: (element: T, index: number) => boolean): T; lastOrDefault(predicate: (element: T, index: number) => element is TOther, defaultValue: TDefault): TOther | TDefault; lastOrDefault(predicate: (element: T, index: number) => boolean, defaultValue: TDefault): T | TDefault; lastOrDefault(predicate: (element: T, index: number) => element is TOther): TOther | undefined; lastOrDefault(predicate: (element: T, index: number) => boolean): T | undefined; lastOrDefault(defaultValue: TDefault): T | TDefault; lastOrDefault(): T | undefined; single(predicate: (element: T, index: number) => element is TOther): TOther; single(predicate?: (element: T, index: number) => boolean): T; singleOrDefault(predicate: (element: T, index: number) => element is TOther, defaultValue: TDefault): TOther | TDefault; singleOrDefault(predicate: (element: T, index: number) => boolean, defaultValue: TDefault): T | TDefault; singleOrDefault(predicate: (element: T, index: number) => element is TOther): TOther | undefined; singleOrDefault(predicate: (element: T, index: number) => boolean): T | undefined; singleOrDefault(defaultValue: TDefault): T | TDefault; singleOrDefault(): T | undefined; skip(count: number): IEnumerable; skipWhile(predicate: (element: T, index: number) => boolean): IEnumerable; take(count: number): IEnumerable; takeWhile(predicate: (element: T, index: number) => boolean): IEnumerable; takeExceptLast(count?: number): IEnumerable; takeFromLast(count: number): IEnumerable; indexOf(item: T): number; indexOf(predicate: (element: T, index: number) => boolean): number; lastIndexOf(item: T): number; lastIndexOf(predicate: (element: T, index: number) => boolean): number; asEnumerable(): IEnumerable; cast(): IEnumerable; toArray(): T[]; toLookup(keySelector: (element: T) => TKey): ILookup; toLookup(keySelector: (element: T) => TKey, elementSelector: (element: T) => TElement): ILookup; toLookup(keySelector: (element: T) => TKey, elementSelector: (element: T) => TElement, compareSelector: (key: TKey) => TCompare): ILookup; toObject(keySelector: (element: T) => TKey, elementSelector?: (element: T) => TElement): Record; toDictionary(keySelector: (element: T) => TKey): IDictionary; toDictionary(keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue): IDictionary; toDictionary(keySelector: (element: T) => TKey, elementSelector: (element: T) => TValue, compareSelector: (key: TKey) => TCompare): IDictionary; toJSONString(replacer?: (key: string, value: unknown) => unknown, space?: string | number): string; toJSONString(replacer?: (string | number)[], space?: string | number): string; toJoinedString(separator?: string): string; toJoinedString(separator: string, selector: (element: T, index: number) => TResult): string; doAction(action: (element: T, index: number) => void): IEnumerable; doAction(action: (element: T, index: number) => boolean): IEnumerable; forEach(action: (element: T, index: number) => void): void; forEach(action: (element: T, index: number) => boolean): void; force(): void; letBind(func: (source: IEnumerable) => { length: number;[x: number]: TResult; }): IEnumerable; letBind(func: (source: IEnumerable) => TResult[]): IEnumerable; letBind(func: (source: IEnumerable) => IEnumerable): IEnumerable; share(): IDisposableEnumerable; memoize(): IDisposableEnumerable; catchError(handler: string | ((exception: unknown) => void)): IEnumerable; finallyAction(finallyAction: () => void): IEnumerable; log(): IEnumerable; log(selector: (element: T) => TValue): IEnumerable; trace(message?: string): IEnumerable; trace(message: string, selector: (element: T) => TValue): IEnumerable; } export interface IEnumerator { current(): T; moveNext(): boolean; dispose(): void; } export interface IOrderedEnumerable extends IEnumerable { createOrderedEnumerable(keySelector: (element: T) => TKey, comparer?: (first: TKey, second: TKey) => number, descending?: boolean): IOrderedEnumerable; thenBy(keySelector: (element: T) => TKey): IOrderedEnumerable; thenBy(keySelector: (element: T) => TKey, comparer: (first: TKey, second: TKey) => number): IOrderedEnumerable; thenByDescending(keySelector: (element: T) => TKey): IOrderedEnumerable; thenByDescending(keySelector: (element: T) => TKey, comparer: (first: TKey, second: TKey) => number): IOrderedEnumerable; } export interface IDisposableEnumerable extends IEnumerable { dispose(): void; } export interface IDictionary { add(key: TKey, value: TValue): void; get(key: TKey): TValue; set(key: TKey, value: TValue): boolean; contains(key: TKey): boolean; clear(): void; remove(key: TKey): void; count(): number; toEnumerable(): IEnumerable<{ key: TKey; value: TValue }>; } export interface ILookup { count(): number; get(key: TKey): IEnumerable; contains(key: TKey): boolean; toEnumerable(): IEnumerable>; } export interface IGrouping extends IEnumerable { key(): TKey; getSource(): TElement[]; } } export default Enumerable;