diff --git a/spec-dtslint/Observable-spec.ts b/spec-dtslint/Observable-spec.ts index ee7c1b1053..3033f6f1bf 100644 --- a/spec-dtslint/Observable-spec.ts +++ b/spec-dtslint/Observable-spec.ts @@ -126,4 +126,8 @@ describe('pipe', () => { const customOperator = () => (a: Observable) => a; const o = of('foo').pipe(customOperator()); // $ExpectType Observable }); + + it('should have proper return type for toPromise', () => { + const o = of('foo').toPromise(); // $ExpectType Promise + }); }); diff --git a/src/internal/Observable.ts b/src/internal/Observable.ts index fbea2874ab..02c96a79e7 100644 --- a/src/internal/Observable.ts +++ b/src/internal/Observable.ts @@ -347,9 +347,9 @@ export class Observable implements Subscribable { } /* tslint:disable:max-line-length */ - toPromise(this: Observable): Promise; - toPromise(this: Observable, PromiseCtor: typeof Promise): Promise; - toPromise(this: Observable, PromiseCtor: PromiseConstructorLike): Promise; + toPromise(this: Observable): Promise; + toPromise(this: Observable, PromiseCtor: typeof Promise): Promise; + toPromise(this: Observable, PromiseCtor: PromiseConstructorLike): Promise; /* tslint:enable:max-line-length */ /** @@ -362,13 +362,13 @@ export class Observable implements Subscribable { * @return A Promise that resolves with the last value emit, or * rejects on an error. */ - toPromise(promiseCtor?: PromiseConstructorLike): Promise { + toPromise(promiseCtor?: PromiseConstructorLike): Promise { promiseCtor = getPromiseCtor(promiseCtor); return new promiseCtor((resolve, reject) => { - let value: any; + let value: T | undefined; this.subscribe((x: T) => value = x, (err: any) => reject(err), () => resolve(value)); - }) as Promise; + }) as Promise; } }