Skip to content

Commit 092338f

Browse files
style(typings): added enhanced typings for combineLatest
1 parent 55a2f98 commit 092338f

File tree

3 files changed

+50
-10
lines changed

3 files changed

+50
-10
lines changed

src/CoreOperators.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import {Subject} from './Subject';
55
import {GroupedObservable} from './operator/groupBy';
66
import {Notification} from './Notification';
77

8+
import {CombineLatestSignature} from './operator/combineLatest';
9+
810
export interface CoreOperators<T> {
911
buffer?: (closingNotifier: Observable<any>) => Observable<T[]>;
1012
bufferCount?: (bufferSize: number, startBufferEvery: number) => Observable<T[]>;
@@ -13,7 +15,7 @@ export interface CoreOperators<T> {
1315
bufferWhen?: (closingSelector: () => Observable<any>) => Observable<T[]>;
1416
catch?: (selector: (err: any, source: Observable<T>, caught: Observable<any>) => Observable<any>) => Observable<T>;
1517
combineAll?: <R>(project?: (...values: Array<any>) => R) => Observable<R>;
16-
combineLatest?: <R>(...observables: Array<Observable<any> | ((...values: Array<any>) => R)>) => Observable<R>;
18+
combineLatest: CombineLatestSignature<T>;
1719
concat?: <R>(...observables: (Observable<any> | Scheduler)[]) => Observable<R>;
1820
concatAll?: () => Observable<T>;
1921
concatMap?: <R>(project: ((x: T, ix: number) => Observable<any>), projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable<R>;

src/Observable.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ import {ErrorObservable} from './observable/ErrorObservable';
3737
import {AjaxCreationMethod} from './observable/dom/AjaxObservable';
3838
import {WebSocketSubject} from './observable/dom/WebSocketSubject';
3939

40+
import {CombineLatestSignature} from './operator/combineLatest';
41+
4042
export type ObservableOrPromise<T> = Observable<T> | Promise<T>;
4143
export type ArrayOrIterator<T> = Iterator<T> | ArrayLike<T>;
4244
export type ObservableInput<T> = ObservableOrPromise<T> | ArrayOrIterator<T>;
@@ -191,9 +193,7 @@ export class Observable<T> implements CoreOperators<T> {
191193
bufferWhen: (closingSelector: () => Observable<any>) => Observable<T[]>;
192194
catch: (selector: (err: any, source: Observable<T>, caught: Observable<any>) => Observable<any>) => Observable<T>;
193195
combineAll: <R>(project?: (...values: Array<any>) => R) => Observable<R>;
194-
combineLatest: <R>(...observables: Array<Observable<any> |
195-
Array<Observable<any>> |
196-
((...values: Array<any>) => R)>) => Observable<R>;
196+
combineLatest: CombineLatestSignature<T>;
197197
concat: <R>(...observables: (Observable<any> | Scheduler)[]) => Observable<R>;
198198
concatAll: () => Observable<any>;
199199
concatMap: <R>(project: ((x: T, ix: number) => Observable<any>), projectResult?: (x: T, y: any, ix: number, iy: number) => R) => Observable<R>;

src/operator/combineLatest.ts

+44-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Observable} from '../Observable';
1+
import {Observable, ObservableInput} from '../Observable';
22
import {ArrayObservable} from '../observable/ArrayObservable';
33
import {isArray} from '../util/isArray';
44
import {Scheduler} from '../Scheduler';
@@ -19,8 +19,8 @@ import {subscribeToResult} from '../util/subscribeToResult';
1919
* @returns {Observable} an observable of other projected values from the most recent values from each observable, or an array of each of
2020
* the most recent values from each observable.
2121
*/
22-
export function combineLatest<T, R>(...observables: Array<Observable<any> |
23-
Array<Observable<any>> |
22+
export function combineLatest<T, R>(...observables: Array<ObservableInput<any> |
23+
Array<ObservableInput<any>> |
2424
((...values: Array<any>) => R)>): Observable<R> {
2525
let project: (...values: Array<any>) => R = null;
2626
if (typeof observables[observables.length - 1] === 'function') {
@@ -38,6 +38,27 @@ export function combineLatest<T, R>(...observables: Array<Observable<any> |
3838
return new ArrayObservable(observables).lift<T, R>(new CombineLatestOperator<T, R>(project));
3939
}
4040

41+
/* tslint:disable:max-line-length */
42+
export interface CombineLatestSignature<T> {
43+
<T2>(v2: ObservableInput<T2>): Observable<[T, T2]>;
44+
<T2, T3>(v2: ObservableInput<T2>, v3: ObservableInput<T3>): Observable<[T, T2, T3]>;
45+
<T2, T3, T4>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>): Observable<[T, T2, T3, T4]>;
46+
<T2, T3, T4, T5>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>): Observable<[T, T2, T3, T4, T5]>;
47+
<T2, T3, T4, T5, T6>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>): Observable<[T, T2, T3, T4, T5, T6]>;
48+
49+
<R>(project: (v1: T) => R): Observable<R>;
50+
<T2, R>(v2: ObservableInput<T2>, project: (v1: T, v2: T2) => R): Observable<R>;
51+
<T2, T3, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, project: (v1: T, v2: T2, v3: T3) => R): Observable<R>;
52+
<T2, T3, T4, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, project: (v1: T, v2: T2, v3: T3, v4: T4) => R): Observable<R>;
53+
<T2, T3, T4, T5, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => R): Observable<R>;
54+
<T2, T3, T4, T5, T6, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => R): Observable<R>;
55+
56+
<R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R)>): Observable<R>;
57+
<R>(array: ObservableInput<any>[]): Observable<R>;
58+
<R>(array: ObservableInput<any>[], project: (...values: Array<any>) => R): Observable<R>;
59+
}
60+
/* tslint:enable:max-line-length */
61+
4162
/**
4263
* Combines the values from observables passed as arguments. This is done by subscribing
4364
* to each observable, in order, and collecting an array of each of the most recent values any time any of the observables
@@ -48,8 +69,25 @@ export function combineLatest<T, R>(...observables: Array<Observable<any> |
4869
* @returns {Observable} an observable of other projected values from the most recent values from each observable, or an array of each of
4970
* the most recent values from each observable.
5071
*/
51-
export function combineLatestStatic<T, R>(...observables: Array<any | Observable<any> |
52-
Array<Observable<any>> |
72+
/* tslint:disable:max-line-length */
73+
export function combineLatestStatic<T>(v1: ObservableInput<T>): Observable<[T]>;
74+
export function combineLatestStatic<T, T2>(v1: ObservableInput<T>, v2: ObservableInput<T2>): Observable<[T, T2]>;
75+
export function combineLatestStatic<T, T2, T3>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>): Observable<[T, T2, T3]>;
76+
export function combineLatestStatic<T, T2, T3, T4>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>): Observable<[T, T2, T3, T4]>;
77+
export function combineLatestStatic<T, T2, T3, T4, T5>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>): Observable<[T, T2, T3, T4, T5]>;
78+
export function combineLatestStatic<T, T2, T3, T4, T5, T6>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>): Observable<[T, T2, T3, T4, T5, T6]>;
79+
export function combineLatestStatic<T, R>(v1: ObservableInput<T>, project: (v1: T) => R): Observable<R>;
80+
export function combineLatestStatic<T, T2, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, project: (v1: T, v2: T2) => R): Observable<R>;
81+
export function combineLatestStatic<T, T2, T3, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, project: (v1: T, v2: T2, v3: T3) => R): Observable<R>;
82+
export function combineLatestStatic<T, T2, T3, T4, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, project: (v1: T, v2: T2, v3: T3, v4: T4) => R): Observable<R>;
83+
export function combineLatestStatic<T, T2, T3, T4, T5, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => R): Observable<R>;
84+
export function combineLatestStatic<T, T2, T3, T4, T5, T6, R>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => R): Observable<R>;
85+
export function combineLatestStatic<R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R)>): Observable<R>;
86+
export function combineLatestStatic<R>(array: ObservableInput<any>[]): Observable<R>;
87+
export function combineLatestStatic<R>(array: ObservableInput<any>[], project: (...values: Array<any>) => R): Observable<R>;
88+
/* tslint:enable:max-line-length */
89+
export function combineLatestStatic<T, R>(...observables: Array<any | ObservableInput<any> |
90+
Array<ObservableInput<any>> |
5391
(((...values: Array<any>) => R)) |
5492
Scheduler>): Observable<R> {
5593
let project: (...values: Array<any>) => R = null;
@@ -150,4 +188,4 @@ export class CombineLatestSubscriber<T, R> extends OuterSubscriber<T, R> {
150188
}
151189
this.destination.next(result);
152190
}
153-
}
191+
}

0 commit comments

Comments
 (0)