File tree Expand file tree Collapse file tree 3 files changed +11
-7
lines changed Expand file tree Collapse file tree 3 files changed +11
-7
lines changed Original file line number Diff line number Diff line change @@ -3,11 +3,15 @@ import { of, defer } from 'rxjs';
3
3
it ( 'should enforce function parameter' , ( ) => {
4
4
const a = defer ( ) ; // $ExpectError
5
5
} ) ;
6
-
6
+
7
7
it ( 'should infer correctly with function return observable' , ( ) => {
8
8
const a = defer ( ( ) => of ( 1 , 2 , 3 ) ) ; // $ExpectType Observable<number>
9
9
} ) ;
10
10
11
11
it ( 'should infer correctly with function return promise' , ( ) => {
12
12
const a = defer ( ( ) => Promise . resolve ( 5 ) ) ; // $ExpectType Observable<number>
13
13
} ) ;
14
+
15
+ it ( 'should support union type returns' , ( ) => {
16
+ const a = defer ( ( ) => Math . random ( ) > 0.5 ? of ( 123 ) : of ( 'abc' ) ) ; // $ExpectType Observable<string | number>
17
+ } ) ;
Original file line number Diff line number Diff line change 1
1
import { Observable } from '../Observable' ;
2
- import { SubscribableOrPromise } from '../types' ;
2
+ import { SubscribableOrPromise , ObservedValueOf , ObservableInput } from '../types' ;
3
3
import { from } from './from' ; // lol
4
4
import { empty } from './empty' ;
5
5
@@ -50,9 +50,9 @@ import { empty } from './empty';
50
50
* @name defer
51
51
* @owner Observable
52
52
*/
53
- export function defer < T > ( observableFactory : ( ) => SubscribableOrPromise < T > | void ) : Observable < T > {
54
- return new Observable ( subscriber => {
55
- let input : SubscribableOrPromise < T > | void ;
53
+ export function defer < O extends ObservableInput < any > > ( observableFactory : ( ) => O | void ) : Observable < ObservedValueOf < O > > {
54
+ return new Observable < ObservedValueOf < O > > ( subscriber => {
55
+ let input : O | void ;
56
56
try {
57
57
input = observableFactory ( ) ;
58
58
} catch ( err ) {
@@ -62,4 +62,4 @@ export function defer<T>(observableFactory: () => SubscribableOrPromise<T> | voi
62
62
const source = input ? from ( input ) : empty ( ) ;
63
63
return source . subscribe ( subscriber ) ;
64
64
} ) ;
65
- }
65
+ }
Original file line number Diff line number Diff line change @@ -94,5 +94,5 @@ export function iif<T, F>(
94
94
trueResult : SubscribableOrPromise < T > = EMPTY ,
95
95
falseResult : SubscribableOrPromise < F > = EMPTY
96
96
) : Observable < T | F > {
97
- return defer < T | F > ( ( ) => condition ( ) ? trueResult : falseResult ) ;
97
+ return defer ( ( ) => condition ( ) ? trueResult : falseResult ) ;
98
98
}
You can’t perform that action at this time.
0 commit comments