microsoft / microsoft/TypeScript
Can't use type aliases or conditional types resolving to Promise for async/await return types
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
TypeScript Version: 3.1
Search Terms:
- async promise alias
- async promise conditional
Code
type P<T> = Promise<T>
async function foo<T>(x: T): P<T> {
return x;
}
async function bar<T>(x: T): T extends number ? Promise<number> : Promise<any> {
return x;
}
Expected behavior:
No error.
Actual behavior:
Type 'P' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value.
Type 'T extends number ? Promise : Promise' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value.
Playground Link:
Link
Related Issues:
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by compiling the two examples with TypeScript 3.1 and confirm the reported ES5/ES3 diagnostics. Trace the async-function return-type validation for type aliases and conditional types, then add regression coverage showing both examples compile without error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100