Microsoft/TypeScript
Auf GitHub ansehenInverted `Promise` should warn like it does without inverting
Open
#46.140 geöffnet am 30. Sept. 2021
Experience EnhancementFix AvailableHelp WantedSuggestion
Repository-Metriken
- Stars
- (48.455 Stars)
- PR-Merge-Metriken
- (Durchschn. Merge 6T 17h) (9 gemergte PRs in 30 T)
Beschreibung
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.