From df774a6dd0338b2f92bdac7c9b2e4e710643f1a7 Mon Sep 17 00:00:00 2001 From: John Chadwick Date: Fri, 11 Oct 2019 13:18:33 -0700 Subject: [PATCH 1/2] fix(toPromise): correct toPromise return type --- src/internal/Observable.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/internal/Observable.ts b/src/internal/Observable.ts index 3decd66e47..54ec2a9267 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; } } From ab17ff935abccaf688b71cf600bd3c9ff2964f24 Mon Sep 17 00:00:00 2001 From: John Chadwick Date: Mon, 14 Oct 2019 10:42:27 -0700 Subject: [PATCH 2/2] fix(toPromise): add test for toPromise type --- spec-dtslint/Observable-spec.ts | 4 ++++ 1 file changed, 4 insertions(+) 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 + }); });