Microsoft/TypeScript
Auf GitHub ansehenNarrowed `const` variables are widened in block-scoped closures
Open
#61.158 geöffnet am 10. Feb. 2025
Domain: check: Control FlowHelp WantedPossible Improvement
Repository-Metriken
- Stars
- (48.455 Stars)
- PR-Merge-Metriken
- (Durchschn. Merge 6T 17h) (9 gemergte PRs in 30 T)
Beschreibung
🔎 Search Terms
narrowing, cfa, closure,
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about n/a
⏯ Playground Link
💻 Code
declare const s: string;
if (s === 'foo') {
function bad() {
const foo: 'foo' = s;
}
}
// in non-strict code bad() might be accessible outside of the narrowed branch,
// so make sure we're strict
export {}
🙁 Actual behavior
error trying to use the variable as its narrowed value.
🙂 Expected behavior
No error. bad() is a local function only reachable within the scope in which s has been definitely narrowed to 'foo'.
Additional Information
Found organically in https://github.com/typescript-eslint/typescript-eslint/pull/10182#discussion_r1948337564 (with a narrowed member access corollary)