Closed
Description
Bug Report
π Search Terms
- Promise.resolve
- PromiseLike
- Union Type
π Version & Regression Information
- This changed between versions 3.5.1 and 3.6.2
β― Playground Link
Playground link with relevant code
π» Code
function f1(x: number): number | Promise<number> {
return Promise.resolve(x);
}
function f2(x: number): number | PromiseLike<number> {
return Promise.resolve(x);
}
function f3(x: number): number | Promise<number> | PromiseLike<number> {
return Promise.resolve(x);
}
const g1: Promise<number> = Promise.resolve(f1(42)); //OK
const g2: Promise<number> = Promise.resolve(f2(42)); //OK
const g3: Promise<number> = Promise.resolve(f3(42)); //Fails
π Actual behavior
The variable g3
fails the type check with the following error
Type 'Promise<number | Promise<number>>' is not assignable to type 'Promise<number>'.
Type 'number | Promise<number>' is not assignable to type 'number'.
Type 'Promise<number>' is not assignable to type 'number'.
Here, g3
is infered to the type Promise<number | Promise<number>>
. However, comparing to the behavior on g1
and g2
, this seems to be a bug, which should be Promise<number>
instead.
π Expected behavior
No error.