Skip to content

Cannot await Thenable #55408

Open
Open
@rotu

Description

@rotu

🔎 Search Terms

"Type of 'await' operand must either be a valid promise or must not contain a callable 'then' member.", "TS1320"

🕗 Version & Regression Information

  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about async

⏯ Playground Link

https://www.typescriptlang.org/play?target=9#code/PTAEAEBcEMCcHMCmkBcoCiBlATABm9gFCEDGA9gHYDOkoAtgJ4AqAFohdAEYA2ioAvKADehUKEhsKACkoAxAK7cAZgEtuvACYAaUJQBKiAFaISkRBoCUQ0LGTzYFXRQXK1mgPwA6KQEYLoAF9CIMJoKgYKElAleUjIFUpQaDpoFWl-ETFQcmpaWAEkgHdU2kZWdi5eAG5RMRyqMl5PbjJ4KQByADdobnlEdp1YHXaUAfEGAAdEMiUbCxqs20h7R1gakLLJSr4qaHiqVUQqUAAFWDI6FSpEABkVAGtEAB4KeTpORFgAPmJryCYVHRpvJIFJkqkKDpcBYgA

💻 Code

// @target: ES2022

const myThenable = {
  then(onFulfilled, onRejected){ return onFulfilled?.(1) }
}

async function amain() {
   const r = await myThenable;
   console.log('value', r, ':', typeof r);
   return r;
}

myThenable satisfies PromiseLike<number>

setTimeout(amain, 0)

Workbench Repro

🙁 Actual behavior

An error is shown:

Type of 'await' operand must either be a valid promise or must not contain a callable 'then' member.

🙂 Expected behavior

I expect no error or a suppressible warning. I also expect some explanation of "why" or a suggestion like "wrap the thenable in a Promise.resolve()"

Additional information about the issue

This is valid JavaScript, and executes in Deno, Node, Chrome, and Firefox.

Note that await doesn't even require its argument to be a PromiseLike - then may have return type void or even never!

Metadata

Metadata

Assignees

Labels

Needs InvestigationThis issue needs a team member to investigate its status.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions