@@ -2,6 +2,7 @@ import {Observable} from '../Observable';
2
2
import { ArrayObservable } from '../observable/fromArray' ;
3
3
import { CombineLatestOperator } from './combineLatest-support' ;
4
4
import { isArray } from '../util/isArray' ;
5
+ import { ObservableOrPromise , ArrayOrIterator } from '../types' ;
5
6
6
7
/**
7
8
* 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';
13
14
* @returns {Observable } an observable of other projected values from the most recent values from each observable, or an array of each of
14
15
* the most recent values from each observable.
15
16
*/
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 ;
20
60
if ( typeof observables [ observables . length - 1 ] === 'function' ) {
21
61
project = < ( ...values : Array < any > ) => R > observables . pop ( ) ;
22
62
}
23
63
24
64
// if the first and only other argument besides the resultSelector is an array
25
65
// assume it's been called with `combineLatest([obs1, obs2, obs3], project)`
26
66
if ( observables . length === 1 && isArray ( observables [ 0 ] ) ) {
27
- observables = < Array < Observable < any > > > observables [ 0 ] ;
67
+ observables = < any > observables [ 0 ] ;
28
68
}
29
69
30
70
observables . unshift ( this ) ;
0 commit comments