Microsoft/TypeScript
在 GitHub 查看Inverted `Promise` should warn like it does without inverting
Open
#46,140 建立於 2021年9月30日
Experience EnhancementFix AvailableHelp WantedSuggestion
倉庫指標
- Star
- (48,455 star)
- PR 合併指標
- (平均合併 6天 17小時) (30 天內合併 9 個 PR)
描述
Suggestion
🔍 Search Terms
This condition will always return true since this 'Promise<string | undefined>' is always defined.(2801) Did you forget to use 'await'?
✅ Viability Checklist
My suggestion meets these guidelines:
- This wouldn't be a breaking change in existing TypeScript/JavaScript code
- This wouldn't change the runtime behavior of existing JavaScript code
- This could be implemented without emitting different JS based on the types of the expressions
- This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
- This feature would agree with the rest of TypeScript's Design Goals.
⭐ Suggestion
When checking the inverted truthyness if something returned from an async function without calling await, it should warn you you forgot await. This works without inverting.
📃 Motivating Example
async function foo(): Promise<string | undefined> {
return
}
const value = foo()
if (!value) { // <-- fails silently
// ...
}
const awaitedValue = await foo()
if (awaitedValue) { // <-- Emits ts2801
// ...
}
💻 Use Cases
In my use, I had a function that returned a User | undefined and I was doing something if there wasn't a user returned. Later, I made the function async and forgot to update this since it was failing silently.