Skip to content

Commit 45ec41b

Browse files
style(typings): Adding combineLatest typings
1 parent 8456c72 commit 45ec41b

File tree

4 files changed

+80
-9
lines changed

4 files changed

+80
-9
lines changed

src/CoreOperators.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {ConnectableObservable} from './observable/ConnectableObservable';
44
import {Subject} from './Subject';
55
import {GroupedObservable} from './operator/groupBy-support';
66
import {Notification} from './Notification';
7+
import * as operator from './operator-typings';
78

89
export interface CoreOperators<T> {
910
buffer?: (closingNotifier: Observable<any>) => Observable<T[]>;
@@ -13,7 +14,7 @@ export interface CoreOperators<T> {
1314
bufferWhen?: (closingSelector: () => Observable<any>) => Observable<T[]>;
1415
catch?: (selector: (err: any, source: Observable<T>, caught: Observable<any>) => Observable<any>) => Observable<T>;
1516
combineAll?: <R>(project?: (...values: Array<any>) => R) => Observable<R>;
16-
combineLatest?: <R>(...observables: Array<Observable<any> | ((...values: Array<any>) => R)>) => Observable<R>;
17+
combineLatest?: operator.operator_proto_combineLatest<T>;
1718
concat?: <R>(...observables: (Observable<any> | Scheduler)[]) => Observable<R>;
1819
concatAll?: () => Observable<T>;
1920
concatMap?: <R>(project: ((x: T, ix: number) => Observable<any>), projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable<R>;

src/Observable.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,7 @@ export class Observable<T> implements CoreOperators<T> {
182182
bufferWhen: (closingSelector: () => Observable<any>) => Observable<T[]>;
183183
catch: (selector: (err: any, source: Observable<T>, caught: Observable<any>) => Observable<any>) => Observable<T>;
184184
combineAll: <R>(project?: (...values: Array<any>) => R) => Observable<R>;
185-
combineLatest: <R>(...observables: Array<Observable<any> |
186-
Array<Observable<any>> |
187-
((...values: Array<any>) => R)>) => Observable<R>;
185+
combineLatest: operator.operator_proto_combineLatest<T>;
188186
concat: <R>(...observables: (Observable<any> | Scheduler)[]) => Observable<R>;
189187
concatAll: () => Observable<any>;
190188
concatMap: <R>(project: ((x: T, ix: number) => Observable<any>), projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable<R>;

src/operator-typings.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,35 @@ import {GroupByObservable} from './operator/groupBy';
1010
import {TimeInterval} from './operator/extended/timeInterval';
1111
import {ObservableOrPromise, ArrayOrIterator, _Selector, _IndexSelector, _SwitchMapResultSelector, _ObservableMergeMapProjector, _IteratorMergeMapProjector, _Predicate, _PredicateObservable, _Comparer, _Accumulator, _MergeAccumulator} from './types';
1212

13+
export interface operator_proto_combineLatest<T> {
14+
<TResult>(project: (v1: T) => TResult): Observable<TResult>;
15+
<TResult>(project: (v1: T) => TResult): Observable<TResult>;
16+
<T2>(second: ObservableOrPromise<T2>): Observable<[T, T2]>;
17+
<T2>(array: [ObservableOrPromise<T2>]): Observable<[T, T2]>;
18+
<T2, TResult>(second: ObservableOrPromise<T2>, project: (v1: T, v2: T2) => TResult): Observable<TResult>;
19+
<T2, TResult>(second: ObservableOrPromise<T2>, project: (v1: T, v2: T2) => TResult): Observable<TResult>;
20+
<T2, TResult>(array: [ObservableOrPromise<T2>], project: (v1: T, v2: T2) => TResult): Observable<TResult>;
21+
<T2, T3>(second: ObservableOrPromise<T2>, third: ObservableOrPromise<T3>): Observable<[T, T2, T3]>;
22+
<T2, T3>(second: ObservableOrPromise<T2>, third: ObservableOrPromise<T3>): Observable<[T, T2, T3]>;
23+
<T2, T3>(second: ArrayOrIterator<T2>, third: ObservableOrPromise<T3>): Observable<[T, T2, T3]>;
24+
<T2, T3>(second: ArrayOrIterator<T2>, third: ArrayOrIterator<T3>): Observable<[T, T2, T3]>;
25+
<T2, T3>(second: ArrayOrIterator<T2>, third: ArrayOrIterator<T3>): Observable<[T, T2, T3]>;
26+
<T2, T3>(second: ObservableOrPromise<T2>, third: ArrayOrIterator<T3>): Observable<[T, T2, T3]>;
27+
<T2, T3>(second: ObservableOrPromise<T2>, third: ArrayOrIterator<T3>): Observable<[T, T2, T3]>;
28+
<T2, T3>(second: ArrayOrIterator<T2>, third: ObservableOrPromise<T3>): Observable<[T, T2, T3]>;
29+
<T2, T3>(array: [ObservableOrPromise<T2>, ObservableOrPromise<T3>]): Observable<[T, T2, T3]>;
30+
<T2, T3, TResult>(second: ObservableOrPromise<T2>, third: ObservableOrPromise<T3>, project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
31+
<T2, T3, TResult>(second: ObservableOrPromise<T2>, third: ObservableOrPromise<T3>, project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
32+
<T2, T3, TResult>(second: ArrayOrIterator<T2>, third: ObservableOrPromise<T3>, project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
33+
<T2, T3, TResult>(second: ArrayOrIterator<T2>, third: ArrayOrIterator<T3>, project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
34+
<T2, T3, TResult>(second: ArrayOrIterator<T2>, third: ArrayOrIterator<T3>, project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
35+
<T2, T3, TResult>(second: ObservableOrPromise<T2>, third: ArrayOrIterator<T3>, project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
36+
<T2, T3, TResult>(second: ObservableOrPromise<T2>, third: ArrayOrIterator<T3>, project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
37+
<T2, T3, TResult>(second: ArrayOrIterator<T2>, third: ObservableOrPromise<T3>, project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
38+
<T2, T3, TResult>(array: [ObservableOrPromise<T2>, ObservableOrPromise<T3>], project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
39+
<TResult>(array: ObservableOrPromise<any>[], project?: Function): Observable<TResult[]>;
40+
(...observables: Array<ObservableOrPromise<T>>): Observable<T[]>;
41+
(...observables: Array<ArrayOrIterator<T>>): Observable<T[]>;
42+
<R>(...observables: Array<ObservableOrPromise<T> | ((...values: Array<T>) => R)>): Observable<R>;
43+
<R>(...observables: Array<ArrayOrIterator<T> | ((...values: Array<T>) => R)>): Observable<R>;
44+
}

src/operator/combineLatest.ts

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {Observable} from '../Observable';
22
import {ArrayObservable} from '../observable/fromArray';
33
import {CombineLatestOperator} from './combineLatest-support';
44
import {isArray} from '../util/isArray';
5+
import {ObservableOrPromise, ArrayOrIterator} from '../types';
56

67
/**
78
* Combines the values from this observable with values from observables passed as arguments. This is done by subscribing
@@ -13,18 +14,57 @@ import {isArray} from '../util/isArray';
1314
* @returns {Observable} an observable of other projected values from the most recent values from each observable, or an array of each of
1415
* the most recent values from each observable.
1516
*/
16-
export function combineLatest<R>(...observables: Array<Observable<any> |
17-
Array<Observable<any>> |
18-
((...values: Array<any>) => R)>): Observable<R> {
19-
let project: (...values: Array<any>) => R = null;
17+
export function combineLatest<T, TResult>(project: (v1: T) => TResult): Observable<TResult>;
18+
export function combineLatest<T, TResult>(project: (v1: T) => TResult): Observable<TResult>;
19+
export function combineLatest<T, T2>(second: ObservableOrPromise<T2>): Observable<[T, T2]>;
20+
export function combineLatest<T, T2>(array: [ObservableOrPromise<T2>]): Observable<[T, T2]>;
21+
export function combineLatest<T, T2, TResult>(second: ObservableOrPromise<T2>, project: (v1: T, v2: T2) => TResult): Observable<TResult>;
22+
export function combineLatest<T, T2, TResult>(second: ObservableOrPromise<T2>, project: (v1: T, v2: T2) => TResult): Observable<TResult>;
23+
export function combineLatest<T, T2, TResult>(array: [ObservableOrPromise<T2>], project: (v1: T, v2: T2) => TResult): Observable<TResult>;
24+
export function combineLatest<T, T2, T3>(second: ObservableOrPromise<T2>, third: ObservableOrPromise<T3>): Observable<[T, T2, T3]>;
25+
export function combineLatest<T, T2, T3>(second: ObservableOrPromise<T2>, third: ObservableOrPromise<T3>): Observable<[T, T2, T3]>;
26+
export function combineLatest<T, T2, T3>(second: ArrayOrIterator<T2>, third: ObservableOrPromise<T3>): Observable<[T, T2, T3]>;
27+
export function combineLatest<T, T2, T3>(second: ArrayOrIterator<T2>, third: ArrayOrIterator<T3>): Observable<[T, T2, T3]>;
28+
export function combineLatest<T, T2, T3>(second: ArrayOrIterator<T2>, third: ArrayOrIterator<T3>): Observable<[T, T2, T3]>;
29+
export function combineLatest<T, T2, T3>(second: ObservableOrPromise<T2>, third: ArrayOrIterator<T3>): Observable<[T, T2, T3]>;
30+
export function combineLatest<T, T2, T3>(second: ObservableOrPromise<T2>, third: ArrayOrIterator<T3>): Observable<[T, T2, T3]>;
31+
export function combineLatest<T, T2, T3>(second: ArrayOrIterator<T2>, third: ObservableOrPromise<T3>): Observable<[T, T2, T3]>;
32+
export function combineLatest<T, T2, T3>(array: [ObservableOrPromise<T2>, ObservableOrPromise<T3>]): Observable<[T, T2, T3]>;
33+
export function combineLatest<T, T2, T3, TResult>(second: ObservableOrPromise<T2>, third: ObservableOrPromise<T3>,
34+
project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
35+
export function combineLatest<T, T2, T3, TResult>(second: ObservableOrPromise<T2>, third: ObservableOrPromise<T3>,
36+
project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
37+
export function combineLatest<T, T2, T3, TResult>(second: ArrayOrIterator<T2>, third: ObservableOrPromise<T3>,
38+
project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
39+
export function combineLatest<T, T2, T3, TResult>(second: ArrayOrIterator<T2>, third: ArrayOrIterator<T3>,
40+
project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
41+
export function combineLatest<T, T2, T3, TResult>(second: ArrayOrIterator<T2>, third: ArrayOrIterator<T3>,
42+
project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
43+
export function combineLatest<T, T2, T3, TResult>(second: ObservableOrPromise<T2>, third: ArrayOrIterator<T3>,
44+
project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
45+
export function combineLatest<T, T2, T3, TResult>(second: ObservableOrPromise<T2>, third: ArrayOrIterator<T3>,
46+
project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
47+
export function combineLatest<T, T2, T3, TResult>(second: ArrayOrIterator<T2>, third: ObservableOrPromise<T3>,
48+
project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
49+
export function combineLatest<T, T2, T3, TResult>(array: [ObservableOrPromise<T2>, ObservableOrPromise<T3>],
50+
project: (v1: T, v2: T2, v3: T3) => TResult): Observable<TResult>;
51+
export function combineLatest<T, TResult>(array: ObservableOrPromise<any>[], project?: Function): Observable<TResult[]>;
52+
export function combineLatest<T>(...observables: Array<ObservableOrPromise<T>>): Observable<T[]>;
53+
export function combineLatest<T>(...observables: Array<ArrayOrIterator<T>>): Observable<T[]>;
54+
export function combineLatest<T, R>(...observables: Array<ObservableOrPromise<T> | ((...values: Array<T>) => R)>): Observable<R>;
55+
export function combineLatest<T, R>(...observables: Array<ArrayOrIterator<T> | ((...values: Array<T>) => R)>): Observable<R>;
56+
export function combineLatest<R>(...observables: Array<any | Observable<any> |
57+
Array<Promise<any>> |
58+
((...values: Array<any>) => R)>): Observable<R> {
59+
let project: (...values: Array<any>) => R = null;
2060
if (typeof observables[observables.length - 1] === 'function') {
2161
project = <(...values: Array<any>) => R>observables.pop();
2262
}
2363

2464
// if the first and only other argument besides the resultSelector is an array
2565
// assume it's been called with `combineLatest([obs1, obs2, obs3], project)`
2666
if (observables.length === 1 && isArray(observables[0])) {
27-
observables = <Array<Observable<any>>>observables[0];
67+
observables = <any>observables[0];
2868
}
2969

3070
observables.unshift(this);

0 commit comments

Comments
 (0)