// Type definitions for IxJS 1.0.6 / l2o.js // Project: https://github.com/Reactive-Extensions/IxJS // Definitions by: Igor Oleinikov // Definitions: https://github.com/borisyankov/DefinitelyTyped declare module Ix { export interface Disposable { dispose(): void; } export interface Enumerator extends Disposable { moveNext(): boolean; getCurrent(): T; } export interface EnumeratorStatic { new (moveNext: () => boolean, getCurrent: () => T, dispose: () => void): Enumerator; create(moveNext: () => boolean, getCurrent: () => T, dispose?: () => void): Enumerator; } var Enumerator: EnumeratorStatic; export interface EnumerableFunc { (item: T, index: number, self: Enumerable): TResult; } export interface EnumerablePredicate extends EnumerableFunc { } export interface Predicate { (item: T): boolean; } export interface EqualityComparer { (item1: TFirst, item2: TSecond): boolean; } export interface Comparer { (item1: TFirst, item2: TSecond): number; } export interface Enumerable { // base functions getEnumerator(): Enumerator; // "extension" functions aggregate(seed: TAccumulate, func: (accumulate: TAccumulate, current: T, index: number, self: Enumerable) => TAccumulate, resultSelector: (accumulate: TAccumulate) => TResult): TResult; aggregate(seed: TAccumulate, func: (accumulate: TAccumulate, current: T, index: number, self: Enumerable) => TAccumulate): TAccumulate; aggregate(func: (accumulate: T, current: T, index: number, self: Enumerable) => T): T; reduce(func: (accumulate: T, current: T, index: number, self: Enumerable) => T): T; reduce(func: (accumulate: TAccumulate, current: T, index: number, self: Enumerable) => TAccumulate, seed: TAccumulate): TAccumulate; all(predicate: EnumerablePredicate, thisArg?: any): boolean; every(predicate: EnumerablePredicate, thisArg?: any): boolean; // alias any(predicate?: EnumerablePredicate, thisArg?: any): boolean; some(predicate?: EnumerablePredicate, thisArg?: any): boolean; // alias average(selector?: EnumerableFunc): number; max(): T; max(selector: EnumerableFunc): TResult; min(): T; min(selector: EnumerableFunc): TResult; sum(selector?: EnumerableFunc): number; concat(...sources: Enumerable[]): Enumerable; contains(value: TValue, comparer: EqualityComparer): boolean; contains(value: T): boolean; count(predicate?: EnumerablePredicate, thisArg?: any): number; defaultIfEmpty(defaultValue?: T): Enumerable; distinct(comparer?: EqualityComparer): Enumerable; elementAt(index: number): T; elementAtOrDefault(index: number): T; except(second: Enumerable, comparer: EqualityComparer): Enumerable; except(second: Enumerable): Enumerable; first(predicate?: Predicate): T; firstOrDefault(predicate?: Predicate): T; last(predicate?: Predicate): T; lastOrDefault(predicate?: Predicate): T; single(predicate?: Predicate): T; singleOrDefault(predicate?: Predicate): T; forEach(action: EnumerableFunc, thisArg?: any): void; groupBy( keySelector: (item: T) => TKey, elementSelector: (item: T) => TElement, resultSelector: (key: TKey, values: Enumerable) => TResult, comparer?: EqualityComparer): Enumerable; groupBy( keySelector: (item: T) => TKey, elementSelector: (item: T) => TElement): Enumerable>; groupBy( keySelector: (item: T) => TKey): Enumerable>; // if need to set comparer without resultSelector groupBy( keySelector: (item: T) => TKey, elementSelector: (item: T) => TElement, _: boolean, comparer: EqualityComparer): Enumerable>; // if need to set resultSelector without elementSelector groupBy( keySelector: (item: T) => TKey, _: boolean, resultSelector: (key: TKey, values: Enumerable) => TResult, comparer?: EqualityComparer): Enumerable; // if need to set comparer without elementSelector and resultSelector groupBy( keySelector: (item: T) => TKey, _: boolean, __: boolean, comparer: EqualityComparer): Enumerable>; groupJoin( inner: Enumerable, outerKeySelector: (item: T) => TOuterKey, innerKeySelector: (item: TInner) => TInnerKey, resultSelector: (outer: T, innerSequence: Enumerable) => TResult, comparer: EqualityComparer): Enumerable; groupJoin( inner: Enumerable, outerKeySelector: (item: T) => TKey, innerKeySelector: (item: TInner) => TKey, resultSelector: (outer: T, innerSequence: Enumerable) => TResult): Enumerable; join( inner: Enumerable, outerKeySelector: (item: T) => TOuterKey, innerKeySelector: (item: TInner) => TInnerKey, resultSelector: (outer: T, inner: TInner) => TResult, comparer: EqualityComparer): Enumerable; join( inner: Enumerable, outerKeySelector: (item: T) => TKey, innerKeySelector: (item: TInner) => TKey, resultSelector: (outer: T, inner: TInner) => TResult): Enumerable; intersect(second: Enumerable, comparer: EqualityComparer): Enumerable; intersect(second: Enumerable): Enumerable; union(second: Enumerable, comparer?: EqualityComparer): Enumerable; orderBy(keySelector: (item: T) => TKey, comparer?: Comparer): OrderedEnumerable; orderByDescending(keySelector: (item: T) => TKey, comparer?: Comparer): OrderedEnumerable; reverse(): Enumerable; select(selector: EnumerableFunc, thisArg?: any): Enumerable; map(selector: EnumerableFunc, thisArg?: any): Enumerable; selectMany(collectionSelector: (item: T, index: number) => Enumerable, resultSelector: (outer: T, inner: TCollection) => TResult): Enumerable; selectMany(collectionSelector: (item: T, index: number) => Enumerable): Enumerable; sequenceEqual(second: Enumerable, comparer: EqualityComparer): boolean; sequenceEqual(second: Enumerable): boolean; skip(count: number): Enumerable; skipWhile(selector: EnumerablePredicate, thisArg?: any): Enumerable; take(count: number): Enumerable; takeWhile(selector: EnumerablePredicate, thisArg?: any): Enumerable; toArray(): T[]; toDictionary( keySelector: (item: T) => TKey, elementSelector: (item: T) => TValue, comparer?: EqualityComparer): Dictionary; toDictionary( keySelector: (item: T) => TKey): Dictionary; // if need to set comparer without elementSelector toDictionary( keySelector: (item: T) => TKey, _: boolean, comparer: EqualityComparer): Dictionary; toLookup( keySelector: (item: T) => TKey, elementSelector: (item: T) => TValue, comparer?: EqualityComparer): Lookup; toLookup( keySelector: (item: T) => TKey): Lookup; // if need to set comparer without elementSelector toLookup( keySelector: (item: T) => TKey, _: boolean, comparer: EqualityComparer): Lookup; where(selector: EnumerablePredicate, thisArg?: any): Enumerable; filter(selector: EnumerablePredicate, thisArg?: any): Enumerable; zip(right: Enumerable, selector: (left: T, right: TRight) => TResult): Enumerable; } export interface Grouping extends Enumerable { key: TKey; } export interface OrderedEnumerable extends Enumerable { thenBy(keySelector: (item: T) => TKey, comparer?: Comparer): OrderedEnumerable; thenByDescending(keySelector: (item: T) => TKey, comparer?: Comparer): OrderedEnumerable; } class Dictionary { constructor(capacity?: number, comparer?: EqualityComparer); toEnumerable(): Enumerable>; add(key: TKey, value: TValue): void; remove(key: TKey): boolean; clear(): void; length(): number; tryGetValue(key: TKey): TValue; get(key: TKey): TValue; set(key: TKey, value: TValue): void; getValues(): TValue[]; has(key: TKey): boolean; } export interface KeyValuePair { key: TKey; value: TValue; } export interface Lookup { toEnumerable(): Enumerable>; has(key: TKey): boolean; length(): number; get(key: TKey): Enumerable; } export interface EnumerableStatic { new (getEnumerator: () => Enumerator): Enumerable; create(getEnumerator: () => Enumerator): Enumerable; concat(...sources: Enumerable[]): Enumerable; empty(): Enumerable; fromArray(array: T[]): Enumerable; return(value: T): Enumerable; returnValue(value: T): Enumerable; // alias for ; repeat(value: T, repeatCount?: number): Enumerable; sequenceEqual(first: Enumerable, second: Enumerable, comparer: EqualityComparer): boolean; sequenceEqual(first: Enumerable, second: Enumerable): boolean; } var Enumerable: EnumerableStatic; } declare module "l2o" { export = Ix; }