diff --git a/spec/observables/defer-spec.ts b/spec/observables/defer-spec.ts index f2beddb121..0ebb047d2b 100644 --- a/spec/observables/defer-spec.ts +++ b/spec/observables/defer-spec.ts @@ -1,5 +1,5 @@ import * as Rx from '../../dist/cjs/Rx'; -declare const {hot, expectObservable, expectSubscriptions}; +declare const {hot, expectObservable, expectSubscriptions, type}; const Observable = Rx.Observable; @@ -40,9 +40,9 @@ describe('Observable.defer', () => { it('should create an observable when factory throws', () => { //type definition need to be updated - const e1 = Observable.defer((() => { + const e1 = Observable.defer(() => { throw 'error'; - })); + }); const expected = '#'; expectObservable(e1).toBe(expected); @@ -72,4 +72,16 @@ describe('Observable.defer', () => { expectObservable(e1, unsub).toBe(expected); expectSubscriptions(source.subscriptions).toBe(sourceSubs); }); + + type(() => { + const typeValue = { + val: 3, + str: 'str' + }; + + Observable.defer(() => Observable.of(typeValue)).subscribe(x => { x.str.toString(); }); + Observable.defer(() => { + throw 'error'; + }).subscribe(); + }); }); diff --git a/src/observable/DeferObservable.ts b/src/observable/DeferObservable.ts index cebc595499..99a0631823 100644 --- a/src/observable/DeferObservable.ts +++ b/src/observable/DeferObservable.ts @@ -15,11 +15,11 @@ export class DeferObservable extends Observable { * @name defer * @owner Observable */ - static create(observableFactory: () => Observable): Observable { + static create(observableFactory: () => Observable | void): Observable { return new DeferObservable(observableFactory); } - constructor(private observableFactory: () => Observable) { + constructor(private observableFactory: () => Observable | void) { super(); } @@ -28,7 +28,7 @@ export class DeferObservable extends Observable { if (result === errorObject) { subscriber.error(errorObject.e); } else { - result.subscribe(subscriber); + (>result).subscribe(subscriber); } } }