Skip to content

Commit 4fafff5

Browse files
style(typings): added enhanced typings for combineLatest
1 parent 2ae8f93 commit 4fafff5

File tree

3 files changed

+27
-5
lines changed

3 files changed

+27
-5
lines changed

src/CoreOperators.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import {Subject} from './Subject';
55
import {GroupedObservable} from './operator/groupBy-support';
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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ import {ErrorObservable} from './observable/throw';
3737
import {AjaxCreationMethod} from './observable/dom/ajax';
3838
import {WebSocketSubject} from './observable/dom/webSocket';
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

Lines changed: 21 additions & 1 deletion
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/fromArray';
33
import {CombineLatestOperator} from './combineLatest-support';
44
import {isArray} from '../util/isArray';
@@ -31,3 +31,23 @@ export function combineLatest<T, R>(...observables: Array<Observable<any> |
3131

3232
return new ArrayObservable(observables).lift<T, R>(new CombineLatestOperator<T, R>(project));
3333
}
34+
35+
/* tslint:disable:max-line-length */
36+
export interface CombineLatestSignature<T> {
37+
<T2>(v2: ObservableInput<T2>): Observable<[T, T2]>;
38+
<T2, T3>(v2: ObservableInput<T2>, v3: ObservableInput<T3>): Observable<[T, T2, T3]>;
39+
<T2, T3, T4>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>): Observable<[T, T2, T3, T4]>;
40+
<T2, T3, T4, T5>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>): Observable<[T, T2, T3, T4, T5]>;
41+
<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]>;
42+
43+
<R>(project: (v1: T) => R): Observable<R>;
44+
<T2, R>(v2: ObservableInput<T2>, project: (v1: T, v2: T2) => R): Observable<R>;
45+
<T2, T3, R>(v2: ObservableInput<T2>, v3: ObservableInput<T3>, project: (v1: T, v2: T2, v3: T3) => R): Observable<R>;
46+
<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>;
47+
<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>;
48+
<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>;
49+
50+
<R>(...observables: Array<ObservableInput<any> | ((...values: Array<any>) => R)>): Observable<R>;
51+
<R>(array: ObservableInput<any>[]): Observable<R>;
52+
<R>(array: ObservableInput<any>[], project: (...values: Array<any>) => R): Observable<R>;
53+
}

0 commit comments

Comments
 (0)