Skip to content

Commit

Permalink
fix(toPromise): correct toPromise return type (#5072)
Browse files Browse the repository at this point in the history
* fix(toPromise): correct toPromise return type

* fix(toPromise): add test for toPromise type

BREAKING CHANGE: toPromise return type now returns `T | undefined` in TypeScript, which is correct, but may break builds.
  • Loading branch information
jchv authored and benlesh committed Jan 23, 2020
1 parent 338b174 commit b1c3573
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 6 deletions.
4 changes: 4 additions & 0 deletions spec-dtslint/Observable-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,4 +126,8 @@ describe('pipe', () => {
const customOperator = () => <T>(a: Observable<T>) => a;
const o = of('foo').pipe(customOperator()); // $ExpectType Observable<string>
});

it('should have proper return type for toPromise', () => {
const o = of('foo').toPromise(); // $ExpectType Promise<string | undefined>
});
});
12 changes: 6 additions & 6 deletions src/internal/Observable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -347,9 +347,9 @@ export class Observable<T> implements Subscribable<T> {
}

/* tslint:disable:max-line-length */
toPromise<T>(this: Observable<T>): Promise<T>;
toPromise<T>(this: Observable<T>, PromiseCtor: typeof Promise): Promise<T>;
toPromise<T>(this: Observable<T>, PromiseCtor: PromiseConstructorLike): Promise<T>;
toPromise<T>(this: Observable<T>): Promise<T | undefined>;
toPromise<T>(this: Observable<T>, PromiseCtor: typeof Promise): Promise<T | undefined>;
toPromise<T>(this: Observable<T>, PromiseCtor: PromiseConstructorLike): Promise<T | undefined>;
/* tslint:enable:max-line-length */

/**
Expand All @@ -362,13 +362,13 @@ export class Observable<T> implements Subscribable<T> {
* @return A Promise that resolves with the last value emit, or
* rejects on an error.
*/
toPromise(promiseCtor?: PromiseConstructorLike): Promise<T> {
toPromise(promiseCtor?: PromiseConstructorLike): Promise<T | undefined> {
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<T>;
}) as Promise<T | undefined>;
}
}

Expand Down

0 comments on commit b1c3573

Please sign in to comment.