Microsoft/TypeScript

Inverted `Promise` should warn like it does without inverting

Open

#46.140 geöffnet am 30. Sept. 2021

Auf GitHub ansehen
 (10 Kommentare) (4 Reaktionen) (1 zugewiesene Person)TypeScript (6.726 Forks)batch import
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
    // ...
}

Playground

💻 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.

Contributor Guide