Skip to content

Promise.resolve fails to infer the correct type when the argument is a union type like T | Promise<T> | PromiseLike<T>Β #48195

Closed
@nahcikuy

Description

@nahcikuy

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions