From 19337741c435c6e3a24f5dbeb46d6671632bd1d4 Mon Sep 17 00:00:00 2001 From: David Driscoll Date: Sat, 13 Feb 2016 21:49:40 -0500 Subject: [PATCH] chore(typings): added type signatures for concat/exhaust/merge/switch also adds signatures for the "All", "Map", and "MapTo" variants. --- src/CoreOperators.ts | 55 +++++++++++-------- src/Observable.ts | 54 ++++++++++-------- src/Rx.KitchenSink.ts | 7 ++- src/add/operator/mergeMap.ts | 4 +- src/add/operator/mergeMapTo.ts | 2 +- src/observable/BoundNodeCallbackObservable.ts | 2 +- src/observable/FromObservable.ts | 6 +- src/observable/dom/WebSocketSubject.ts | 2 +- src/operator/combineAll.ts | 7 ++- src/operator/concat.ts | 33 +++++++++-- src/operator/concatAll.ts | 6 +- src/operator/concatMap.ts | 12 +++- src/operator/concatMapTo.ts | 16 +++--- src/operator/exhaust.ts | 6 +- src/operator/exhaustMap.ts | 38 +++++++------ src/operator/map.ts | 4 ++ src/operator/mapTo.ts | 4 ++ src/operator/merge.ts | 41 +++++++++++++- src/operator/mergeAll.ts | 6 +- src/operator/mergeMap.ts | 41 ++++++++------ src/operator/mergeMapTo.ts | 49 ++++++++++------- src/operator/race.ts | 4 +- src/operator/switch.ts | 4 ++ src/operator/switchMap.ts | 38 +++++++------ src/operator/switchMapTo.ts | 40 +++++++------- src/operator/zipAll.ts | 5 ++ 26 files changed, 313 insertions(+), 173 deletions(-) diff --git a/src/CoreOperators.ts b/src/CoreOperators.ts index ccdec5ba0a..fcfce2f31b 100644 --- a/src/CoreOperators.ts +++ b/src/CoreOperators.ts @@ -1,6 +1,3 @@ -import {Observable} from './Observable'; -import {Scheduler} from './Scheduler'; - import {CombineLatestSignature} from './operator/combineLatest'; import {WithLatestFromSignature} from './operator/withLatestFrom'; import {ZipSignature} from './operator/zip'; @@ -70,6 +67,21 @@ import {TimeoutSignature} from './operator/timeout'; import {TimeoutWithSignature} from './operator/timeoutWith'; import {ToArraySignature} from './operator/toArray'; import {ToPromiseSignature} from './operator/toPromise'; +import {CombineAllSignature} from './operator/combineAll'; +import {ConcatSignature} from './operator/concat'; +import {ConcatAllSignature} from './operator/concatAll'; +import {ConcatMapSignature} from './operator/concatMap'; +import {ConcatMapToSignature} from './operator/concatMapTo'; +import {MapSignature} from './operator/map'; +import {MapToSignature} from './operator/mapTo'; +import {MergeSignature} from './operator/merge'; +import {MergeAllSignature} from './operator/mergeAll'; +import {MergeMapSignature} from './operator/mergeMap'; +import {MergeMapToSignature} from './operator/mergeMapTo'; +import {SwitchSignature} from './operator/switch'; +import {SwitchMapSignature} from './operator/switchMap'; +import {SwitchMapToSignature} from './operator/switchMapTo'; +import {ZipAllSignature} from './operator/zipAll'; export interface CoreOperators { buffer: BufferSignature; @@ -79,12 +91,12 @@ export interface CoreOperators { bufferWhen: BufferWhenSignature; cache: CacheSignature; catch: CatchSignature; - combineAll: (project?: (...values: Array) => R) => Observable; + combineAll: CombineAllSignature; combineLatest: CombineLatestSignature; - concat?: (...observables: (Observable | Scheduler)[]) => Observable; - concatAll?: () => Observable; - concatMap?: (project: ((x: T, ix: number) => Observable), projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable; - concatMapTo?: (observable: Observable, projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable; + concat: ConcatSignature; + concatAll: ConcatAllSignature; + concatMap: ConcatMapSignature; + concatMapTo: ConcatMapToSignature; count: CountSignature; dematerialize: DematerializeSignature; debounce: DebounceSignature; @@ -98,10 +110,8 @@ export interface CoreOperators { filter: FilterSignature; finally: FinallySignature; first: FirstSignature; - flatMap?: (project: ((x: T, ix: number) => Observable), - projectResult?: (x: T, y: any, ix: number, iy: number) => R, - concurrent?: number) => Observable; - flatMapTo?: (observable: Observable, projectResult?: (x: T, y: any, ix: number, iy: number) => R, concurrent?: number) => Observable; + flatMap: MergeMapSignature; + flatMapTo: MergeMapToSignature; groupBy: GroupBySignature; ignoreElements: IgnoreElementsSignature; inspect: InspectSignature; @@ -110,14 +120,13 @@ export interface CoreOperators { let: LetSignature; letBind: LetSignature; every: EverySignature; - map?: (project: (x: T, ix?: number) => R, thisArg?: any) => Observable; - mapTo?: (value: R) => Observable; + map: MapSignature; + mapTo: MapToSignature; materialize: MaterializeSignature; - merge?: (...observables: any[]) => Observable; - mergeAll?: (concurrent?: number) => Observable; - mergeMap?: (project: ((x: T, ix: number) => Observable), - projectResult?: (x: T, y: any, ix: number, iy: number) => R, concurrent?: number) => Observable; - mergeMapTo?: (observable: Observable, projectResult?: (x: T, y: any, ix: number, iy: number) => R, concurrent?: number) => Observable; + merge: MergeSignature; + mergeAll: MergeAllSignature; + mergeMap: MergeMapSignature; + mergeMapTo: MergeMapToSignature; multicast: MulticastSignature; observeOn: ObserveOnSignature; partition: PartitionSignature; @@ -141,9 +150,9 @@ export interface CoreOperators { skipWhile: SkipWhileSignature; startWith: StartWithSignature; subscribeOn: SubscribeOnSignature; - switch?: () => Observable; - switchMap?: (project: ((x: T, ix: number) => Observable), projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable; - switchMapTo?: (observable: Observable, projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable; + switch: SwitchSignature; + switchMap: SwitchMapSignature; + switchMapTo: SwitchMapToSignature; take: TakeSignature; takeLast: TakeLastSignature; takeUntil: TakeUntilSignature; @@ -161,5 +170,5 @@ export interface CoreOperators { windowWhen: WindowWhenSignature; withLatestFrom: WithLatestFromSignature; zip: ZipSignature; - zipAll?: (project?: (...values: Array) => R) => Observable; + zipAll: ZipAllSignature; } diff --git a/src/Observable.ts b/src/Observable.ts index bab0c89886..4c66fcc78e 100644 --- a/src/Observable.ts +++ b/src/Observable.ts @@ -1,6 +1,5 @@ import {PartialObserver} from './Observer'; import {Operator} from './Operator'; -import {Scheduler} from './Scheduler'; import {Subscriber} from './Subscriber'; import {Subscription} from './Subscription'; import {root} from './util/root'; @@ -102,6 +101,21 @@ import {TimeoutSignature} from './operator/timeout'; import {TimeoutWithSignature} from './operator/timeoutWith'; import {ToArraySignature} from './operator/toArray'; import {ToPromiseSignature} from './operator/toPromise'; +import {CombineAllSignature} from './operator/combineAll'; +import {ConcatSignature} from './operator/concat'; +import {ConcatAllSignature} from './operator/concatAll'; +import {ConcatMapSignature} from './operator/concatMap'; +import {ConcatMapToSignature} from './operator/concatMapTo'; +import {MapSignature} from './operator/map'; +import {MapToSignature} from './operator/mapTo'; +import {MergeSignature} from './operator/merge'; +import {MergeAllSignature} from './operator/mergeAll'; +import {MergeMapSignature} from './operator/mergeMap'; +import {MergeMapToSignature} from './operator/mergeMapTo'; +import {SwitchSignature} from './operator/switch'; +import {SwitchMapSignature} from './operator/switchMap'; +import {SwitchMapToSignature} from './operator/switchMapTo'; +import {ZipAllSignature} from './operator/zipAll'; export type ObservableOrPromise = Observable | Promise; export type ArrayOrIterator = Iterator | ArrayLike; @@ -264,12 +278,12 @@ export class Observable implements CoreOperators { bufferWhen: BufferWhenSignature; cache: CacheSignature; catch: CatchSignature; - combineAll: (project?: (...values: Array) => R) => Observable; + combineAll: CombineAllSignature; combineLatest: CombineLatestSignature; - concat: (...observables: (Observable | Scheduler)[]) => Observable; - concatAll: () => Observable; - concatMap: (project: ((x: T, ix: number) => Observable), projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable; - concatMapTo: (observable: Observable, projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable; + concat: ConcatSignature; + concatAll: ConcatAllSignature; + concatMap: ConcatMapSignature; + concatMapTo: ConcatMapToSignature; count: CountSignature; dematerialize: DematerializeSignature; debounce: DebounceSignature; @@ -283,10 +297,8 @@ export class Observable implements CoreOperators { filter: FilterSignature; finally: FinallySignature; first: FirstSignature; - flatMap: (project: ((x: T, ix: number) => Observable), - projectResult?: (x: T, y: any, ix: number, iy: number) => R, - concurrent?: number) => Observable; - flatMapTo: (observable: Observable, projectResult?: (x: T, y: any, ix: number, iy: number) => R, concurrent?: number) => Observable; + flatMap: MergeMapSignature; + flatMapTo: MergeMapToSignature; groupBy: GroupBySignature; ignoreElements: IgnoreElementsSignature; inspect: InspectSignature; @@ -295,15 +307,13 @@ export class Observable implements CoreOperators { let: LetSignature; letBind: LetSignature; every: EverySignature; - map: (project: (x: T, ix?: number) => R, thisArg?: any) => Observable; - mapTo: (value: R) => Observable; + map: MapSignature; + mapTo: MapToSignature; materialize: MaterializeSignature; - merge: (...observables: any[]) => Observable; - mergeAll: (concurrent?: any) => Observable; - mergeMap: (project: ((x: T, ix: number) => Observable), - projectResult?: (x: T, y: any, ix: number, iy: number) => R, - concurrent?: number) => Observable; - mergeMapTo: (observable: Observable, projectResult?: (x: T, y: any, ix: number, iy: number) => R, concurrent?: number) => Observable; + merge: MergeSignature; + mergeAll: MergeAllSignature; + mergeMap: MergeMapSignature; + mergeMapTo: MergeMapToSignature; multicast: MulticastSignature; observeOn: ObserveOnSignature; partition: PartitionSignature; @@ -327,9 +337,9 @@ export class Observable implements CoreOperators { skipWhile: SkipWhileSignature; startWith: StartWithSignature; subscribeOn: SubscribeOnSignature; - switch: () => Observable; - switchMap: (project: ((x: T, ix: number) => Observable), projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable; - switchMapTo: (observable: Observable, projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable; + switch: SwitchSignature; + switchMap: SwitchMapSignature; + switchMapTo: SwitchMapToSignature; take: TakeSignature; takeLast: TakeLastSignature; takeUntil: TakeUntilSignature; @@ -347,7 +357,7 @@ export class Observable implements CoreOperators { windowWhen: WindowWhenSignature; withLatestFrom: WithLatestFromSignature; zip: ZipSignature; - zipAll: (project?: (...values: Array) => R) => Observable; + zipAll: ZipAllSignature; /** * @method Symbol.observable diff --git a/src/Rx.KitchenSink.ts b/src/Rx.KitchenSink.ts index 87b968de23..5ed2620521 100644 --- a/src/Rx.KitchenSink.ts +++ b/src/Rx.KitchenSink.ts @@ -15,6 +15,8 @@ import {MinSignature} from './operator/min'; import {PairwiseSignature} from './operator/pairwise'; import {TimeIntervalSignature} from './operator/timeInterval'; import {MergeScanSignature} from './operator/mergeScan'; +import {SwitchFirstSignature} from './operator/exhaust'; +import {SwitchFirstMapSignature} from './operator/exhaustMap'; export interface KitchenSinkOperators extends CoreOperators { isEmpty?: IsEmptySignature; @@ -29,9 +31,8 @@ export interface KitchenSinkOperators extends CoreOperators { pairwise?: PairwiseSignature; timeInterval?: TimeIntervalSignature; mergeScan?: MergeScanSignature; - exhaust?: () => Observable; - exhaustMap?: (project: ((x: T, ix: number) => Observable), - projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable; + exhaust?: SwitchFirstSignature; + exhaustMap?: SwitchFirstMapSignature; } // statics diff --git a/src/add/operator/mergeMap.ts b/src/add/operator/mergeMap.ts index a7e9142ecd..0c31b7b446 100644 --- a/src/add/operator/mergeMap.ts +++ b/src/add/operator/mergeMap.ts @@ -2,7 +2,7 @@ import {Observable} from '../../Observable'; import {mergeMap} from '../../operator/mergeMap'; -Observable.prototype.mergeMap = mergeMap; -Observable.prototype.flatMap = mergeMap; +Observable.prototype.mergeMap = mergeMap; +Observable.prototype.flatMap = mergeMap; export var _void: void; \ No newline at end of file diff --git a/src/add/operator/mergeMapTo.ts b/src/add/operator/mergeMapTo.ts index 66afeabf44..e578e6124e 100644 --- a/src/add/operator/mergeMapTo.ts +++ b/src/add/operator/mergeMapTo.ts @@ -2,6 +2,6 @@ import {Observable} from '../../Observable'; import {mergeMapTo} from '../../operator/mergeMapTo'; -Observable.prototype.mergeMapTo = mergeMapTo; +Observable.prototype.mergeMapTo = mergeMapTo; export var _void: void; \ No newline at end of file diff --git a/src/observable/BoundNodeCallbackObservable.ts b/src/observable/BoundNodeCallbackObservable.ts index 6512d72e9c..847058b6e3 100644 --- a/src/observable/BoundNodeCallbackObservable.ts +++ b/src/observable/BoundNodeCallbackObservable.ts @@ -24,7 +24,7 @@ export class BoundNodeCallbackObservable extends Observable { selector: Function | void = undefined, scheduler?: Scheduler): Function { return (...args: any[]): Observable => { - return new BoundNodeCallbackObservable(callbackFunc, selector, args, scheduler); + return new BoundNodeCallbackObservable(callbackFunc, selector, args, scheduler); }; } diff --git a/src/observable/FromObservable.ts b/src/observable/FromObservable.ts index 29b6f56d9e..f7e595a77e 100644 --- a/src/observable/FromObservable.ts +++ b/src/observable/FromObservable.ts @@ -35,11 +35,11 @@ export class FromObservable extends Observable { if (ish instanceof Observable && !scheduler) { return ish; } - return new FromObservable(ish, scheduler); + return new FromObservable(ish, scheduler); } else if (isArray(ish)) { - return new ArrayObservable(ish, scheduler); + return new ArrayObservable(ish, scheduler); } else if (isPromise(ish)) { - return new PromiseObservable(ish, scheduler); + return new PromiseObservable(ish, scheduler); } else if (typeof ish[SymbolShim.iterator] === 'function' || typeof ish === 'string') { return new IteratorObservable(ish, null, null, scheduler); } else if (isArrayLike(ish)) { diff --git a/src/observable/dom/WebSocketSubject.ts b/src/observable/dom/WebSocketSubject.ts index 5806b86fc0..3fdba0656e 100644 --- a/src/observable/dom/WebSocketSubject.ts +++ b/src/observable/dom/WebSocketSubject.ts @@ -34,7 +34,7 @@ export class WebSocketSubject extends Subject { } static create(urlConfigOrSource: string | WebSocketSubjectConfig): WebSocketSubject { - return new WebSocketSubject(urlConfigOrSource); + return new WebSocketSubject(urlConfigOrSource); } constructor(urlConfigOrSource: string | WebSocketSubjectConfig | Observable, destination?: Observer) { diff --git a/src/operator/combineAll.ts b/src/operator/combineAll.ts index 3dd1adfae9..902349fa4d 100644 --- a/src/operator/combineAll.ts +++ b/src/operator/combineAll.ts @@ -13,6 +13,11 @@ import {Observable} from '../Observable'; * most recent values from each collected observable as arguments, in order. * @returns {Observable} an observable of projected results or arrays of recent values. */ -export function combineAll(project?: (...values: Array) => R): Observable { +export function combineAll(project?: (...values: Array) => R): Observable { return this.lift(new CombineLatestOperator(project)); } + +export interface CombineAllSignature { + (): Observable; + (project?: (...values: Array) => R): Observable; +} diff --git a/src/operator/concat.ts b/src/operator/concat.ts index e4594c9c56..1fdf8cab63 100644 --- a/src/operator/concat.ts +++ b/src/operator/concat.ts @@ -1,4 +1,4 @@ -import {Observable} from '../Observable'; +import {Observable, ObservableInput} from '../Observable'; import {Scheduler} from '../Scheduler'; import {isScheduler} from '../util/isScheduler'; import {ArrayObservable} from '../observable/ArrayObservable'; @@ -12,10 +12,23 @@ import {MergeAllOperator} from './mergeAll'; * @params {Scheduler} [scheduler] an optional scheduler to schedule each observable subscription on. * @returns {Observable} All values of each passed observable merged into a single observable, in order, in serial fashion. */ -export function concat(...observables: Array | Scheduler>): Observable { - return concatStatic(this, ...observables); +export function concat(...observables: Array | Scheduler>): Observable { + return concatStatic(this, ...observables); } +/* tslint:disable:max-line-length */ +export interface ConcatSignature { + (scheduler?: Scheduler): Observable; + (v2: ObservableInput, scheduler?: Scheduler): Observable; + (v2: ObservableInput, v3: ObservableInput, scheduler?: Scheduler): Observable; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, scheduler?: Scheduler): Observable; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, scheduler?: Scheduler): Observable; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput, scheduler?: Scheduler): Observable; + (...observables: Array | Scheduler>): Observable; + (...observables: Array | Scheduler>): Observable; +} +/* tslint:enable:max-line-length */ + /** * Joins multiple observables together by subscribing to them one at a time and merging their results * into the returned observable. Will wait for each observable to complete before moving on to the next. @@ -23,12 +36,22 @@ export function concat(...observables: Array | Scheduler>) * @params {Scheduler} [scheduler] an optional scheduler to schedule each observable subscription on. * @returns {Observable} All values of each passed observable merged into a single observable, in order, in serial fashion. */ -export function concatStatic(...observables: Array | Scheduler>): Observable { +/* tslint:disable:max-line-length */ +export function concatStatic(v1: ObservableInput, scheduler?: Scheduler): Observable; +export function concatStatic(v1: ObservableInput, v2: ObservableInput, scheduler?: Scheduler): Observable; +export function concatStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, scheduler?: Scheduler): Observable; +export function concatStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, scheduler?: Scheduler): Observable; +export function concatStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, scheduler?: Scheduler): Observable; +export function concatStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput, scheduler?: Scheduler): Observable; +export function concatStatic(...observables: (ObservableInput | Scheduler)[]): Observable; +export function concatStatic(...observables: (ObservableInput | Scheduler)[]): Observable; +/* tslint:enable:max-line-length */ +export function concatStatic(...observables: Array | Scheduler>): Observable { let scheduler: Scheduler = null; let args = observables; if (isScheduler(args[observables.length - 1])) { scheduler = args.pop(); } - return new ArrayObservable(observables, scheduler).lift(new MergeAllOperator(1)); + return new ArrayObservable(observables, scheduler).lift(new MergeAllOperator(1)); } diff --git a/src/operator/concatAll.ts b/src/operator/concatAll.ts index 1f5eb64cbb..b0edd13c94 100644 --- a/src/operator/concatAll.ts +++ b/src/operator/concatAll.ts @@ -12,5 +12,9 @@ import {MergeAllOperator} from './mergeAll'; * @returns {Observable} an observable of values merged from the incoming observables. */ export function concatAll(): T { - return this.lift(new MergeAllOperator(1)); + return this.lift(new MergeAllOperator(1)); +} + +export interface ConcatAllSignature { + (): T; } diff --git a/src/operator/concatMap.ts b/src/operator/concatMap.ts index 2dfcf02adf..76ac80870d 100644 --- a/src/operator/concatMap.ts +++ b/src/operator/concatMap.ts @@ -1,5 +1,5 @@ import {MergeMapOperator} from './mergeMap'; -import {Observable} from '../Observable'; +import {Observable, ObservableInput} from '../Observable'; /** * Maps values from the source observable into new Observables, then merges them in a serialized fashion, @@ -20,7 +20,13 @@ import {Observable} from '../Observable'; * @returns {Observable} an observable of values merged from the projected Observables as they were subscribed to, * one at a time. Optionally, these values may have been projected from a passed `projectResult` argument. */ -export function concatMap(project: (value: T, index: number) => Observable, - resultSelector?: (outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) => R2) { +export function concatMap(project: (value: T, index: number) => ObservableInput, + resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R) { return this.lift(new MergeMapOperator(project, resultSelector, 1)); } + +export interface ConcatMapSignature { + (project: (value: T, index: number) => ObservableInput): Observable; + (project: (value: T, index: number) => ObservableInput, + resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R): Observable; +} diff --git a/src/operator/concatMapTo.ts b/src/operator/concatMapTo.ts index c702064dea..bd6a3c5249 100644 --- a/src/operator/concatMapTo.ts +++ b/src/operator/concatMapTo.ts @@ -1,4 +1,4 @@ -import {Observable} from '../Observable'; +import {Observable, ObservableInput} from '../Observable'; import {MergeMapToOperator} from './mergeMapTo'; /** @@ -14,11 +14,13 @@ import {MergeMapToOperator} from './mergeMapTo'; * @returns {Observable} an observable of values merged together by joining the passed observable * with itself, one after the other, for each value emitted from the source. */ -export function concatMapTo(observable: Observable, - resultSelector?: ( - outerValue: T, - innerValue: R, - outerIndex: number, - innerIndex: number) => R2): Observable { +export function concatMapTo(observable: Observable, + resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R): Observable { return this.lift(new MergeMapToOperator(observable, resultSelector, 1)); } + +export interface ConcatMapToSignature { + (observable: ObservableInput): Observable; + (observable: ObservableInput, + resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R): Observable; +} diff --git a/src/operator/exhaust.ts b/src/operator/exhaust.ts index 070a135dec..a534bbb89b 100644 --- a/src/operator/exhaust.ts +++ b/src/operator/exhaust.ts @@ -13,7 +13,11 @@ import {subscribeToResult} from '../util/subscribeToResult'; * @returns {Observable} an Observable which contains all of the items of the first Observable and following Observables in the source. */ export function exhaust(): Observable { - return this.lift(new SwitchFirstOperator()); + return this.lift(new SwitchFirstOperator()); +} + +export interface SwitchFirstSignature { + (): T; } class SwitchFirstOperator implements Operator { diff --git a/src/operator/exhaustMap.ts b/src/operator/exhaustMap.ts index b6dbc09ebd..94677d4728 100644 --- a/src/operator/exhaustMap.ts +++ b/src/operator/exhaustMap.ts @@ -1,5 +1,5 @@ import {Operator} from '../Operator'; -import {Observable} from '../Observable'; +import {Observable, ObservableInput} from '../Observable'; import {Subscriber} from '../Subscriber'; import {OuterSubscriber} from '../OuterSubscriber'; import {InnerSubscriber} from '../InnerSubscriber'; @@ -12,33 +12,35 @@ import {subscribeToResult} from '../util/subscribeToResult'; * @param {function} [resultSelector] optional function for then selecting on each inner Observable. * @returns {Observable} an Observable containing all the projected Observables of each item of the source concatenated together. */ -export function exhaustMap(project: (value: T, index: number) => Observable, - resultSelector?: ( - outerValue: T, - innerValue: R, - outerIndex: number, - innerIndex: number) => R2): Observable { +export function exhaustMap(project: (value: T, index: number) => ObservableInput, + resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R): Observable { return this.lift(new SwitchFirstMapOperator(project, resultSelector)); } -class SwitchFirstMapOperator implements Operator { - constructor(private project: (value: T, index: number) => Observable, - private resultSelector?: (outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) => R2) { +export interface SwitchFirstMapSignature { + (project: (value: T, index: number) => ObservableInput): Observable; + (project: (value: T, index: number) => ObservableInput, + resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R): Observable; +} + +class SwitchFirstMapOperator implements Operator { + constructor(private project: (value: T, index: number) => ObservableInput, + private resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R) { } - call(subscriber: Subscriber): Subscriber { + call(subscriber: Subscriber): Subscriber { return new SwitchFirstMapSubscriber(subscriber, this.project, this.resultSelector); } } -class SwitchFirstMapSubscriber extends OuterSubscriber { +class SwitchFirstMapSubscriber extends OuterSubscriber { private hasSubscription: boolean = false; private hasCompleted: boolean = false; private index: number = 0; - constructor(destination: Subscriber, - private project: (value: T, index: number) => Observable, - private resultSelector?: (outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) => R2) { + constructor(destination: Subscriber, + private project: (value: T, index: number) => ObservableInput, + private resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R) { super(destination); } @@ -67,9 +69,9 @@ class SwitchFirstMapSubscriber extends OuterSubscriber { } } - notifyNext(outerValue: T, innerValue: R, + notifyNext(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number, - innerSub: InnerSubscriber): void { + innerSub: InnerSubscriber): void { const { resultSelector, destination } = this; if (resultSelector) { this.trySelectResult(outerValue, innerValue, outerIndex, innerIndex); @@ -78,7 +80,7 @@ class SwitchFirstMapSubscriber extends OuterSubscriber { } } - private trySelectResult(outerValue: T, innerValue: R, + private trySelectResult(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): void { const { resultSelector, destination } = this; try { diff --git a/src/operator/map.ts b/src/operator/map.ts index 929fd5fd3a..113c57e8d8 100644 --- a/src/operator/map.ts +++ b/src/operator/map.ts @@ -19,6 +19,10 @@ export function map(project: (value: T, index: number) => R, thisArg?: any return this.lift(new MapOperator(project, thisArg)); } +export interface MapSignature { + (project: (value: T, index: number) => R, thisArg?: any): Observable; +} + class MapOperator implements Operator { constructor(private project: (value: T, index: number) => R, private thisArg: any) { } diff --git a/src/operator/mapTo.ts b/src/operator/mapTo.ts index 56674d156b..41e01a0aeb 100644 --- a/src/operator/mapTo.ts +++ b/src/operator/mapTo.ts @@ -14,6 +14,10 @@ export function mapTo(value: R): Observable { return this.lift(new MapToOperator(value)); } +export interface MapToSignature { + (value: R): Observable; +} + class MapToOperator implements Operator { value: R; diff --git a/src/operator/merge.ts b/src/operator/merge.ts index 2c6984fcb7..f47fdf8ec7 100644 --- a/src/operator/merge.ts +++ b/src/operator/merge.ts @@ -1,4 +1,4 @@ -import {Observable} from '../Observable'; +import {Observable, ObservableInput} from '../Observable'; import {Scheduler} from '../Scheduler'; import {ArrayObservable} from '../observable/ArrayObservable'; import {MergeAllOperator} from './mergeAll'; @@ -12,12 +12,47 @@ import {isScheduler} from '../util/isScheduler'; * @param {Observable} input Observables * @returns {Observable} an Observable that emits items that are the result of every input Observable. */ -export function merge(...observables: Array | Scheduler | number>): Observable { +export function merge(...observables: Array | Scheduler | number>): Observable { observables.unshift(this); return mergeStatic.apply(this, observables); } -export function mergeStatic(...observables: Array | Scheduler | number>): Observable { +/* tslint:disable:max-line-length */ +export interface MergeSignature { + (scheduler?: Scheduler): Observable; + (concurrent?: number, scheduler?: Scheduler): Observable; + (v2: ObservableInput, scheduler?: Scheduler): Observable; + (v2: ObservableInput, concurrent?: number, scheduler?: Scheduler): Observable; + (v2: ObservableInput, v3: ObservableInput, scheduler?: Scheduler): Observable; + (v2: ObservableInput, v3: ObservableInput, concurrent?: number, scheduler?: Scheduler): Observable; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, scheduler?: Scheduler): Observable; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, concurrent?: number, scheduler?: Scheduler): Observable; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, scheduler?: Scheduler): Observable; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, concurrent?: number, scheduler?: Scheduler): Observable; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput, scheduler?: Scheduler): Observable; + (v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput, concurrent?: number, scheduler?: Scheduler): Observable; + (...observables: Array | Scheduler | number>): Observable; + (...observables: Array | Scheduler | number>): Observable; +} +/* tslint:enable:max-line-length */ + +/* tslint:disable:max-line-length */ +export function mergeStatic(v1: ObservableInput, scheduler?: Scheduler): Observable; +export function mergeStatic(v1: ObservableInput, concurrent?: number, scheduler?: Scheduler): Observable; +export function mergeStatic(v1: ObservableInput, v2: ObservableInput, scheduler?: Scheduler): Observable; +export function mergeStatic(v1: ObservableInput, v2: ObservableInput, concurrent?: number, scheduler?: Scheduler): Observable; +export function mergeStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, scheduler?: Scheduler): Observable; +export function mergeStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, concurrent?: number, scheduler?: Scheduler): Observable; +export function mergeStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, scheduler?: Scheduler): Observable; +export function mergeStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, concurrent?: number, scheduler?: Scheduler): Observable; +export function mergeStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, scheduler?: Scheduler): Observable; +export function mergeStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, concurrent?: number, scheduler?: Scheduler): Observable; +export function mergeStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput, scheduler?: Scheduler): Observable; +export function mergeStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput, concurrent?: number, scheduler?: Scheduler): Observable; +export function mergeStatic(...observables: (ObservableInput | Scheduler | number)[]): Observable; +export function mergeStatic(...observables: (ObservableInput | Scheduler | number)[]): Observable; +/* tslint:enable:max-line-length */ +export function mergeStatic(...observables: Array | Scheduler | number>): Observable { let concurrent = Number.POSITIVE_INFINITY; let scheduler: Scheduler = null; let last: any = observables[observables.length - 1]; diff --git a/src/operator/mergeAll.ts b/src/operator/mergeAll.ts index 314f206e8e..f2b79ed82b 100644 --- a/src/operator/mergeAll.ts +++ b/src/operator/mergeAll.ts @@ -6,7 +6,11 @@ import {OuterSubscriber} from '../OuterSubscriber'; import {subscribeToResult} from '../util/subscribeToResult'; export function mergeAll(concurrent: number = Number.POSITIVE_INFINITY): T { - return this.lift(new MergeAllOperator(concurrent)); + return this.lift(new MergeAllOperator(concurrent)); +} + +export interface MergeAllSignature { + (): T; } export class MergeAllOperator implements Operator, T> { diff --git a/src/operator/mergeMap.ts b/src/operator/mergeMap.ts index 586be05980..c4f22c9dd3 100644 --- a/src/operator/mergeMap.ts +++ b/src/operator/mergeMap.ts @@ -1,4 +1,4 @@ -import {Observable} from '../Observable'; +import {Observable, ObservableInput} from '../Observable'; import {Operator} from '../Operator'; import {Subscriber} from '../Subscriber'; import {Subscription} from '../Subscription'; @@ -17,34 +17,41 @@ import {InnerSubscriber} from '../InnerSubscriber'; * @returns {Observable} an Observable that emits the result of applying the transformation function to each item * emitted by the source Observable and merging the results of the Observables obtained from this transformation */ -export function mergeMap(project: (value: T, index: number) => Observable, - resultSelector?: (outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) => R2 | number, - concurrent: number = Number.POSITIVE_INFINITY): Observable { +export function mergeMap(project: (value: T, index: number) => ObservableInput, + resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R | number, + concurrent: number = Number.POSITIVE_INFINITY): Observable { return this.lift(new MergeMapOperator(project, resultSelector, concurrent)); } -export class MergeMapOperator implements Operator { - constructor(private project: (value: T, index: number) => Observable, - private resultSelector?: (outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) => R2, +export interface MergeMapSignature { + (project: (value: T, index: number) => ObservableInput, concurrent?: number): Observable; + (project: (value: T, index: number) => ObservableInput, + resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R, + concurrent?: number): Observable; +} + +export class MergeMapOperator implements Operator { + constructor(private project: (value: T, index: number) => ObservableInput, + private resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R, private concurrent: number = Number.POSITIVE_INFINITY) { } - call(observer: Subscriber): Subscriber { + call(observer: Subscriber): Subscriber { return new MergeMapSubscriber( observer, this.project, this.resultSelector, this.concurrent ); } } -export class MergeMapSubscriber extends OuterSubscriber { +export class MergeMapSubscriber extends OuterSubscriber { private hasCompleted: boolean = false; private buffer: Observable[] = []; private active: number = 0; protected index: number = 0; - constructor(destination: Subscriber, - private project: (value: T, index: number) => Observable, - private resultSelector?: (outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) => R2, + constructor(destination: Subscriber, + private project: (value: T, index: number) => ObservableInput, + private resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R, private concurrent: number = Number.POSITIVE_INFINITY) { super(destination); } @@ -71,7 +78,7 @@ export class MergeMapSubscriber extends OuterSubscriber { } private _innerSub(ish: any, value: T, index: number): void { - this.add(subscribeToResult(this, ish, value, index)); + this.add(subscribeToResult(this, ish, value, index)); } protected _complete(): void { @@ -81,9 +88,9 @@ export class MergeMapSubscriber extends OuterSubscriber { } } - notifyNext(outerValue: T, innerValue: R, + notifyNext(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number, - innerSub: InnerSubscriber): void { + innerSub: InnerSubscriber): void { if (this.resultSelector) { this._notifyResultSelector(outerValue, innerValue, outerIndex, innerIndex); } else { @@ -91,8 +98,8 @@ export class MergeMapSubscriber extends OuterSubscriber { } } - _notifyResultSelector(outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) { - let result: any; + _notifyResultSelector(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) { + let result: R; try { result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex); } catch (err) { diff --git a/src/operator/mergeMapTo.ts b/src/operator/mergeMapTo.ts index 0d08f352b3..7136d6a567 100644 --- a/src/operator/mergeMapTo.ts +++ b/src/operator/mergeMapTo.ts @@ -1,4 +1,4 @@ -import {Observable} from '../Observable'; +import {Observable, ObservableInput, ObservableOrPromise} from '../Observable'; import {Operator} from '../Operator'; import {PartialObserver} from '../Observer'; import {Subscriber} from '../Subscriber'; @@ -7,34 +7,41 @@ import {OuterSubscriber} from '../OuterSubscriber'; import {InnerSubscriber} from '../InnerSubscriber'; import {subscribeToResult} from '../util/subscribeToResult'; -export function mergeMapTo(observable: Observable, - resultSelector?: (outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) => R2 | number, - concurrent: number = Number.POSITIVE_INFINITY): Observable { +export function mergeMapTo(observable: Observable, + resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R | number, + concurrent: number = Number.POSITIVE_INFINITY): Observable { return this.lift(new MergeMapToOperator(observable, resultSelector, concurrent)); } -// TODO: Figure out correct signature here: an Operator, R2> -// needs to implement call(observer: Subscriber): Subscriber> -export class MergeMapToOperator implements Operator, R2> { - constructor(private ish: Observable | Promise, - private resultSelector?: (outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) => R2, +export interface MergeMapToSignature { + (observable: ObservableInput, concurrent?: number): Observable; + (observable: ObservableInput, + resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R, + concurrent?: number): Observable; +} + +// TODO: Figure out correct signature here: an Operator, R> +// needs to implement call(observer: Subscriber): Subscriber> +export class MergeMapToOperator implements Operator, R> { + constructor(private ish: ObservableOrPromise, + private resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R, private concurrent: number = Number.POSITIVE_INFINITY) { } - call(observer: Subscriber): Subscriber { + call(observer: Subscriber): Subscriber { return new MergeMapToSubscriber(observer, this.ish, this.resultSelector, this.concurrent); } } -export class MergeMapToSubscriber extends OuterSubscriber { +export class MergeMapToSubscriber extends OuterSubscriber { private hasCompleted: boolean = false; private buffer: Observable[] = []; private active: number = 0; protected index: number = 0; - constructor(destination: Subscriber, - private ish: Observable | Promise, - private resultSelector?: (outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) => R2, + constructor(destination: Subscriber, + private ish: ObservableOrPromise, + private resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R, private concurrent: number = Number.POSITIVE_INFINITY) { super(destination); } @@ -54,11 +61,11 @@ export class MergeMapToSubscriber extends OuterSubscriber { } private _innerSub(ish: any, - destination: PartialObserver, - resultSelector: (outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) => R2, + destination: PartialObserver, + resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R, value: T, index: number): void { - this.add(subscribeToResult(this, ish, value, index)); + this.add(subscribeToResult(this, ish, value, index)); } protected _complete(): void { @@ -68,9 +75,9 @@ export class MergeMapToSubscriber extends OuterSubscriber { } } - notifyNext(outerValue: T, innerValue: R, + notifyNext(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number, - innerSub: InnerSubscriber): void { + innerSub: InnerSubscriber): void { const { resultSelector, destination } = this; if (resultSelector) { this.trySelectResult(outerValue, innerValue, outerIndex, innerIndex); @@ -79,10 +86,10 @@ export class MergeMapToSubscriber extends OuterSubscriber { } } - private trySelectResult(outerValue: T, innerValue: R, + private trySelectResult(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): void { const { resultSelector, destination } = this; - let result: R2; + let result: R; try { result = resultSelector(outerValue, innerValue, outerIndex, innerIndex); } catch (err) { diff --git a/src/operator/race.ts b/src/operator/race.ts index 92175c0b46..c2d555a335 100644 --- a/src/operator/race.ts +++ b/src/operator/race.ts @@ -36,7 +36,7 @@ export interface RaceSignature { * @returns {Observable} an Observable that mirrors the output of the first Observable to emit an item. */ export function raceStatic(...observables: Array | Array>>): Observable; -export function raceStatic(...observables: Array | Array>>): Observable { +export function raceStatic(...observables: Array | Array>>): Observable { // if the only argument is an array, it was most likely called with // `pair([obs1, obs2, ...])` if (observables.length === 1) { @@ -47,7 +47,7 @@ export function raceStatic(...observables: Array | Array(observables).lift(new RaceOperator()); } export class RaceOperator implements Operator { diff --git a/src/operator/switch.ts b/src/operator/switch.ts index 184dfadbed..f6d2161aef 100644 --- a/src/operator/switch.ts +++ b/src/operator/switch.ts @@ -24,6 +24,10 @@ export function _switch(): T { return this.lift(new SwitchOperator()); } +export interface SwitchSignature { + (): T; +} + class SwitchOperator implements Operator { call(subscriber: Subscriber): Subscriber { return new SwitchSubscriber(subscriber); diff --git a/src/operator/switchMap.ts b/src/operator/switchMap.ts index 4b85ab0532..6ca2e78096 100644 --- a/src/operator/switchMap.ts +++ b/src/operator/switchMap.ts @@ -1,5 +1,5 @@ import {Operator} from '../Operator'; -import {Observable} from '../Observable'; +import {Observable, ObservableInput} from '../Observable'; import {Subscriber} from '../Subscriber'; import {Subscription} from '../Subscription'; import {OuterSubscriber} from '../OuterSubscriber'; @@ -16,32 +16,34 @@ import {subscribeToResult} from '../util/subscribeToResult'; * @returns {Observable} an Observable that emits the items emitted by the Observable returned from applying func to * the most recently emitted item emitted by the source Observable. */ -export function switchMap(project: (value: T, index: number) => Observable, - resultSelector?: ( - outerValue: T, - innerValue: R, - outerIndex: number, - innerIndex: number) => R2): Observable { +export function switchMap(project: (value: T, index: number) => ObservableInput, + resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R): Observable { return this.lift(new SwitchMapOperator(project, resultSelector)); } -class SwitchMapOperator implements Operator { - constructor(private project: (value: T, index: number) => Observable, - private resultSelector?: (outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) => R2) { +export interface SwitchMapSignature { + (project: (value: T, index: number) => ObservableInput): Observable; + (project: (value: T, index: number) => ObservableInput, + resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R): Observable; +} + +class SwitchMapOperator implements Operator { + constructor(private project: (value: T, index: number) => ObservableInput, + private resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R) { } - call(subscriber: Subscriber): Subscriber { + call(subscriber: Subscriber): Subscriber { return new SwitchMapSubscriber(subscriber, this.project, this.resultSelector); } } -class SwitchMapSubscriber extends OuterSubscriber { +class SwitchMapSubscriber extends OuterSubscriber { private index: number = 0; private innerSubscription: Subscription; - constructor(destination: Subscriber, - private project: (value: T, index: number) => Observable, - private resultSelector?: (outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) => R2) { + constructor(destination: Subscriber, + private project: (value: T, index: number) => ObservableInput, + private resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R) { super(destination); } @@ -84,9 +86,9 @@ class SwitchMapSubscriber extends OuterSubscriber { } } - notifyNext(outerValue: T, innerValue: R, + notifyNext(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number, - innerSub: InnerSubscriber): void { + innerSub: InnerSubscriber): void { if (this.resultSelector) { this._tryNotifyNext(outerValue, innerValue, outerIndex, innerIndex); } else { @@ -94,7 +96,7 @@ class SwitchMapSubscriber extends OuterSubscriber { } } - _tryNotifyNext(outerValue: T, innerValue: R, outerIndex: number, innerIndex: number): void { + _tryNotifyNext(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): void { let result: any; try { result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex); diff --git a/src/operator/switchMapTo.ts b/src/operator/switchMapTo.ts index ea712ff0f8..9b152d0cd8 100644 --- a/src/operator/switchMapTo.ts +++ b/src/operator/switchMapTo.ts @@ -1,37 +1,39 @@ import {Operator} from '../Operator'; -import {Observable} from '../Observable'; +import {Observable, ObservableInput} from '../Observable'; import {Subscriber} from '../Subscriber'; import {Subscription} from '../Subscription'; import {OuterSubscriber} from '../OuterSubscriber'; import {InnerSubscriber} from '../InnerSubscriber'; import {subscribeToResult} from '../util/subscribeToResult'; -export function switchMapTo(observable: Observable, - resultSelector?: ( - outerValue: T, - innerValue: R, - outerIndex: number, - innerIndex: number) => R2): Observable { +export function switchMapTo(observable: Observable, + resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R): Observable { return this.lift(new SwitchMapToOperator(observable, resultSelector)); } -class SwitchMapToOperator implements Operator { - constructor(private observable: Observable, - private resultSelector?: (outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) => R2) { +export interface SwitchMapToSignature { + (observable: ObservableInput): Observable; + (observable: ObservableInput, + resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R): Observable; +} + +class SwitchMapToOperator implements Operator { + constructor(private observable: Observable, + private resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R) { } - call(subscriber: Subscriber): Subscriber { + call(subscriber: Subscriber): Subscriber { return new SwitchMapToSubscriber(subscriber, this.observable, this.resultSelector); } } -class SwitchMapToSubscriber extends OuterSubscriber { +class SwitchMapToSubscriber extends OuterSubscriber { private index: number = 0; private innerSubscription: Subscription; - constructor(destination: Subscriber, - private inner: Observable, - private resultSelector?: (outerValue: T, innerValue: R, outerIndex: number, innerIndex: number) => R2) { + constructor(destination: Subscriber, + private inner: Observable, + private resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R) { super(destination); } @@ -62,9 +64,9 @@ class SwitchMapToSubscriber extends OuterSubscriber { } } - notifyNext(outerValue: T, innerValue: R, + notifyNext(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number, - innerSub: InnerSubscriber): void { + innerSub: InnerSubscriber): void { const { resultSelector, destination } = this; if (resultSelector) { this.tryResultSelector(outerValue, innerValue, outerIndex, innerIndex); @@ -73,10 +75,10 @@ class SwitchMapToSubscriber extends OuterSubscriber { } } - private tryResultSelector(outerValue: T, innerValue: R, + private tryResultSelector(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): void { const { resultSelector, destination } = this; - let result: R2; + let result: R; try { result = resultSelector(outerValue, innerValue, outerIndex, innerIndex); } catch (err) { diff --git a/src/operator/zipAll.ts b/src/operator/zipAll.ts index 3f33b3d88f..aefe3afba0 100644 --- a/src/operator/zipAll.ts +++ b/src/operator/zipAll.ts @@ -4,3 +4,8 @@ import {Observable} from '../Observable'; export function zipAll(project?: (...values: Array) => R): Observable { return this.lift(new ZipOperator(project)); } + +export interface ZipAllSignature { + (): Observable; + (project?: (...values: Array) => R): Observable; +}