Microsoft/TypeScript

Non-null assertion should work on possibly-uninitialized auto-typed `let` variables

Open

#52,439 opened on Jan 26, 2023

View on GitHub
 (1 comment) (1 reaction) (0 assignees)TypeScript (6,726 forks)batch import
Experience EnhancementHelp WantedSuggestion

Repository metrics

Stars
 (48,455 stars)
PR merge metrics
 (Avg merge 6d 17h) (9 merged PRs in 30d)

Description

Bug Report

🔎 Search Terms

non-null postfix bang implicit any

🕗 Version & Regression Information

  • This is the behavior in every version I tried

⏯ Playground Link

This is the link

💻 Code

let foo;
if (Math.random() > 0.5) {
  foo = "hello";
}
// bar: string | undefined, seems fine
let bar = foo;
/* -- pretend I know foo is defined for other reasons -- */
// Error, foo is implicitly any
let baz = foo!;

🙁 Actual behavior

Implicit any on foo!

🙂 Expected behavior

Since the inferred type of foo (as seen in bar) is string | undefined, foo! should trivially have the type string

Contributor guide