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.