// Type definitions for linq.js 2.2 // Project: http://linqjs.codeplex.com/ // Definitions by: Marcin Najder , Sebastiaan Dammann // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // todo: jQuery plugin, RxJS Binding declare namespace linq { interface EnumerableStatic { Choice(...contents: T[]): Enumerable; Choice(contents: T[]): Enumerable; Cycle(...contents: T[]): Enumerable; Cycle(contents: T[]): Enumerable; Empty(): Enumerable; From(obj: T[]): Enumerable; From(obj: number): Enumerable; // input number returns single number From(obj: string): Enumerable; // input string returns sequence of characters From(obj: NodeList): Enumerable; // node list returns sequence of nodes From(obj: Object): Enumerable>; // object returns sequence of key/value pairs Return(element: T): Enumerable; Matches(input: string, pattern: RegExp): Enumerable; Matches(input: string, pattern: string, flags?: string): Enumerable; Range(start: number, count: number, step?: number): Enumerable; RangeDown(start: number, count: number, step?: number): Enumerable; RangeTo(start: number, to: number, step?: number): Enumerable; Repeat(obj: any, count?: number): Enumerable; RepeatWithFinalize(initializer: () => T, finalizer: (resource: T) => void): Enumerable; Generate(func: () => T, count?: number): Enumerable; Generate(func: string, count?: number): Enumerable; ToInfinity(start?: number, step?: number): Enumerable; ToNegativeInfinity(start?: number, step?: number): Enumerable; Unfold(seed: T, func: ($: T) => T): Enumerable; Unfold(seed: any, func: string): Enumerable; } interface Enumerable { //Projection and Filtering Methods CascadeBreadthFirst(func: ($: T) => any[], resultSelector: (v: any, i: number) => any): Enumerable; CascadeBreadthFirst(func: string, resultSelector: string): Enumerable; CascadeDepthFirst(func: ($: T) => any[], resultSelector: (v: any, i: number) => any): Enumerable; CascadeDepthFirst(func: string, resultSelector: string): Enumerable; Flatten(...items: any[]): Enumerable; Pairwise(selector: (prev: any, next: any) => any): Enumerable; Pairwise(selector: string): Enumerable; Scan(func: (a: any, b: any) => any): Enumerable; Scan(func: string): Enumerable; Scan(seed: any, func: (a: any, b: any) => any, resultSelector?: ($: T) => any): Enumerable; Scan(seed: any, func: string, resultSelector?: string): Enumerable; Select(selector: ($: T, i: number) => TResult): Enumerable; Select(selector: string): Enumerable; SelectMany(collectionSelector: ($: T, i: number) => TResult[]): Enumerable; SelectMany(collectionSelector: ($: T, i: number) => Enumerable): Enumerable; SelectMany(collectionSelector: ($: T, i: number) => TCollectionItem[], resultSelector: ($: T, item: TCollectionItem) => TResult): Enumerable; SelectMany(collectionSelector: ($: T, i: number) => Enumerable, resultSelector: ($: T, item: TCollectionItem) => TResult): Enumerable; SelectMany(collectionSelector: string, resultSelector?: string): Enumerable; Where(predicate: ($ : T, i: number) => boolean): Enumerable; Where(predicate: string): Enumerable; OfType(type: Function): Enumerable; Zip(second: any[], selector: (v1: any, v2: any, i: number) => any): Enumerable; Zip(second: any[], selector: string): Enumerable; Zip(second: Enumerable, selector: (v1: any, v2: any, i: number) => any): Enumerable; Zip(second: Enumerable, selector: string): Enumerable; //Join Methods Join(inner: any[], outerKeySelector: (v1: any) => any, innerKeySelector: (v1: any) => any, resultSelector: (v1: any, v2: any) => any, compareSelector?: (v: any) => any): Enumerable; Join(inner: any[], outerKeySelector: string, innerKeySelector: string, resultSelector: string, compareSelector?: string): Enumerable; Join(inner: Enumerable, outerKeySelector: (v1: any) => any, innerKeySelector: (v1: any) => any, resultSelector: (v1: any, v2: any) => any, compareSelector?: (v: any) => any): Enumerable; Join(inner: Enumerable, outerKeySelector: string, innerKeySelector: string, resultSelector: string, compareSelector?: string): Enumerable; GroupJoin(inner: any[], outerKeySelector: (v1: any) => any, innerKeySelector: (v1: any) => any, resultSelector: (v1: any, v2: Enumerable) => any, compareSelector?: (v: any) => any): Enumerable; GroupJoin(inner: any[], outerKeySelector: string, innerKeySelector: string, resultSelector: string, compareSelector?: string): Enumerable; GroupJoin(inner: Enumerable, outerKeySelector: (v1: any) => any, innerKeySelector: (v1: any) => any, resultSelector: (v1: any, v2: Enumerable) => any, compareSelector?: (v: any) => any): Enumerable; GroupJoin(inner: Enumerable, outerKeySelector: string, innerKeySelector: string, resultSelector: string, compareSelector?: string): Enumerable; //Set Methods All(predicate: ($ : T) => boolean): boolean; All(predicate: string): boolean; Any(predicate?: ($: T) => boolean): boolean; Any(predicate?: string): boolean; Concat(second: any[]): Enumerable; Concat(second: Enumerable): Enumerable; Insert(index: number, second: any[]): Enumerable; Insert(index: number, second: Enumerable): Enumerable; Alternate(value: any): Enumerable; Contains(value: any, compareSelector?: ($: T) => any): boolean; Contains(value: any, compareSelector?: string): boolean; DefaultIfEmpty(defaultValue: any): Enumerable; Distinct(compareSelector?: ($: T) => any): Enumerable; Distinct(compareSelector?: string): Enumerable; Except(second: any[], compareSelector?: ($: T) => any): Enumerable; Except(second: any[], compareSelector?: string): Enumerable; Except(second: Enumerable, compareSelector?: ($: T) => any): Enumerable; Except(second: Enumerable, compareSelector?: string): Enumerable; Intersect(second: any[], compareSelector?: ($: T) => any): Enumerable; Intersect(second: any[], compareSelector?: string): Enumerable; Intersect(second: Enumerable, compareSelector?: ($: T) => any): Enumerable; Intersect(second: Enumerable, compareSelector?: string): Enumerable; SequenceEqual(second: any[], compareSelector?: ($: T) => any): boolean; SequenceEqual(second: any[], compareSelector?: string): boolean; SequenceEqual(second: Enumerable, compareSelector?: ($: T) => any): boolean; SequenceEqual(second: Enumerable, compareSelector?: string): boolean; Union(second: any[], compareSelector?: ($: T) => any): Enumerable; Union(second: any[], compareSelector?: string): Enumerable; Union(second: Enumerable, compareSelector?: ($: T) => any): Enumerable; Union(second: Enumerable, compareSelector?: string): Enumerable; //Ordering Methods OrderBy(keySelector?: ($: T) => any): OrderedEnumerable; OrderBy(keySelector?: string): OrderedEnumerable; OrderByDescending(keySelector?: ($: T) => any): OrderedEnumerable; OrderByDescending(keySelector?: string): OrderedEnumerable; Reverse(): Enumerable; Shuffle(): Enumerable; //Grouping Methods GroupBy(keySelector: ($: T) => any, elementSelector?: ($: T) => any, resultSelector?: (key: any, e: any) => any, compareSelector?: ($: T) =>any): Enumerable; GroupBy(keySelector: string, elementSelector?: string, resultSelector?: string, compareSelector?: string): Enumerable; PartitionBy(keySelector: ($: T) => any, elementSelector?: ($: T) => any, resultSelector?: (key: any, e: any) => any, compareSelector?: ($: T) =>any): Enumerable; PartitionBy(keySelector: string, elementSelector?: string, resultSelector?: string, compareSelector?: string): Enumerable; BufferWithCount(count: number): Enumerable; // Aggregate Methods Aggregate(func: (a: any, b: any) => any): any; Aggregate(seed: any, func: (a: any, b: any) => any, resultSelector?: ($: T) => any): any; Aggregate(func: string): any; Aggregate(seed: any, func: string, resultSelector?: string): any; Average(selector?: ($: T) => number): number; Average(selector?: string): number; Count(predicate?: ($: T) => boolean): number; Count(predicate?: string): number; Max(selector?: ($: T) => any): any; Max(selector?: ($: T) => Date): Date; Max(selector?: ($: T) => number): number; Max(selector: ($: T) => string): string; Max(selector?: string): any; Min(selector?: ($: T) => any): any; Min(selector?: ($: T) => Date): Date; Min(selector: ($: T) => string): string; Min(selector?: ($: T) => number): number; Min(selector?: string): any; MaxBy(selector: ($: T) => any): any; MaxBy(selector: ($: T) => string): string; MaxBy(selector: ($: T) => Date): Date; MaxBy(selector: ($: T) => number): number; MaxBy(selector: string): any; MinBy(selector: ($: T) => Date): Date; MinBy(selector: ($: T) => number): any; MinBy(selector: ($: T) => string): string; MinBy(selector: ($: T) => any): any; MinBy(selector: string): any; Sum(selector?: ($: T) => number): number; Sum(selector?: string): number; //Paging Methods ElementAt(index: number): T; ElementAtOrDefault(index: number, defaultValue: T): T; First(predicate?: ($: T) => boolean): T; First(predicate?: string): T; FirstOrDefault(defaultValue: T, predicate?: ($: T) => boolean): T; FirstOrDefault(defaultValue: T, predicate?: string): T; Last(predicate?: ($: T) => boolean): T; Last(predicate?: string): T; LastOrDefault(defaultValue: T, predicate?: ($: T) => boolean): T; LastOrDefault(defaultValue: T, predicate?: string): T; Single(predicate?: ($: T) => boolean): T; Single(predicate?: string): T; SingleOrDefault(defaultValue: T, predicate?: ($: T) => boolean): T; SingleOrDefault(defaultValue: T, predicate?: string): T; Skip(count: number): Enumerable; SkipWhile(predicate: ($: T, i: number) => boolean): Enumerable; SkipWhile(predicate: string): Enumerable; Take(count: number): Enumerable; TakeWhile(predicate: ($: T, i: number) => boolean): Enumerable; TakeWhile(predicate: string): Enumerable; TakeExceptLast(count?: number): Enumerable; TakeFromLast(count: number): Enumerable; IndexOf(item: T): number; LastIndexOf(item: T): number; // Convert Methods ToArray(): T[]; ToLookup(keySelector: ($: T) => TKey, elementSelector?: ($: T) => TValue, compareSelector?: (key: TKey) => any): Lookup; ToLookup(keySelector: string, elementSelector?: string, compareSelector?: string): Lookup; ToObject(keySelector: ($: T) => string, elementSelector: ($: T) => any): any; ToObject(keySelector: string, elementSelector: string): any; ToDictionary(keySelector: ($: T) => TKey, elementSelector: ($: T) => TValue, compareSelector?: (key: TKey) => any): Dictionary; ToDictionary(keySelector: string, elementSelector: string, compareSelector?: string): Dictionary; ToJSON(replacer?: (key: any, value: any) => any, space?: number): string; ToJSON(replacer?: string, space?: number): string; ToString(separator?: string, selector?: ($: T) =>any): string; ToString(separator?: string, selector?: string): string; //Action Methods Do(action: ($: T, i: number) => void ): Enumerable; Do(action: string): Enumerable; ForEach(action: ($: T, i: number) => void ): void; ForEach(func: ($: T, i: number) => boolean): void; ForEach(action_func: string): void; Write(separator?: string, selector?: ($: T) =>any): void; Write(separator?: string, selector?: string): void; WriteLine(selector?: ($: T) =>any): void; Force(): void; //Functional Methods Let(func: (e: Enumerable) => Enumerable): Enumerable; Share(): Enumerable; MemoizeAll(): Enumerable; //Error Handling Methods Catch(handler: (error: Error) => void ): Enumerable; Catch(handler: string): Enumerable; Finally(finallyAction: () => void ): Enumerable; Finally(finallyAction: string): Enumerable; //For Debug Methods Trace(message?: string, selector?: ($: T) =>any): Enumerable; Trace(message?: string, selector?: string): Enumerable; } interface OrderedEnumerable extends Enumerable { ThenBy(keySelector: ($: T) => any): OrderedEnumerable; ThenBy(keySelector: string): OrderedEnumerable; ThenByDescending(keySelector: ($: T) => any): OrderedEnumerable; ThenByDescending(keySelector: string): OrderedEnumerable; } interface Grouping extends Enumerable { Key(): TKey; } interface Lookup { Count(): number; Get(key: TKey): Enumerable; Contains(key: TKey): boolean; ToEnumerable(): Enumerable>; } interface Dictionary { 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(): Enumerable>; } interface KeyValuePair { Key: TKey; Value: TValue; } } declare var Enumerable: linq.EnumerableStatic;