///
// Type definitions for RxJS-Aggregates package
// Project: http://rx.codeplex.com/
// Definitions by: Carl de Billy
// Definitions: https://github.com/borisyankov/DefinitelyTyped
//
// Dependencies:
// -> rx.js
// -> rx.aggregates.js
declare module Rx {
interface IObservable {
aggregate(accumulator: (acc: TAcc, value: T) => TAcc): IObservable;
aggregate(seed: TAcc, accumulator: (acc: TAcc, value: T) => TAcc): IObservable;
any(): IObservable;
any(selector: (item: T) => boolean): IObservable;
isEmpty(predicate?: (value: T) => boolean): IObservable;
all(predicate?: (value: T) => boolean): IObservable;
contains(value: T, comparer?: (value1: T, value2: T) => boolean): IObservable;
count(predicate?: (item: T) => boolean): IObservable;
sum(keySelector?: (item: T) => number): IObservable;
minBy(keySelector: (item: T) => number, comparer?: (value1: T, value2: T) => number): IObservable;
min(comparer?: (value1: T, value2: T) => number): IObservable;
maxBy(keySelector: (item: T) => number, comparer?: (value1: T, value2: T) => number): IObservable;
max(comparer?: (value1: T, value2: T) => number): IObservable;
average(keySelector?: (item: T) => number): IObservable;
sequenceEqual(second: IObservable, comparer?: (value1: T, value2: T) => number): IObservable;
elementAt(index: number): IObservable;
elementAtOrDefault(index: number, defaultValue: T): IObservable;
single(): IObservable;
single(predicate: (T) => boolean): IObservable;
singleOrDefault(): IObservable;
singleOrDefault(predicate: (T) => boolean): IObservable;
singleOrDefault(predicate: (T) => boolean, defaultValue: T): IObservable;
first(): IObservable;
first(predicate: (T) => boolean): IObservable;
firstOrDefault(): IObservable;
firstOrDefault(predicate: (T) => boolean): IObservable;
firstOrDefault(predicate: (T) => boolean, defaultValue: T): IObservable;
last(): IObservable;
last(predicate: (T) => boolean): IObservable;
lastOrDefault(): IObservable;
lastOrDefault(predicate: (T) => boolean): IObservable;
lastOrDefault(predicate: (T) => boolean, defaultValue: T): IObservable;
}
}