Microsoft/TypeScript
Auf GitHub ansehenCondition aliasing doesn't capture optional chain expressions
Open
#49.075 geöffnet am 11. Mai 2022
BugDomain: check: Control FlowHelp Wanted
Repository-Metriken
- Stars
- (48.455 Stars)
- PR-Merge-Metriken
- (Durchschn. Merge 6T 17h) (9 gemergte PRs in 30 T)
Beschreibung
Bug Report
🔎 Search Terms
undefined optional chain aliased condition narrowing
🕗 Version & Regression Information
- This is the behavior in every version I tried (from 4.4 onward, when we added aliased conditions).
⏯ Playground Link
💻 Code
interface Foo {
getValues(): number[];
}
declare const foo: Foo | undefined;
const vals = foo?.getValues();
if (vals) {
foo; // Foo | undefined
}
const vals2 = foo && foo.getValues();
if (vals2) {
foo; // Foo
}
if (foo?.getValues()) {
foo; // Foo
}
🙁 Actual behavior
foo is potentially undefined in the first if block. The assignments fail.
(Added assignments so there's some feedback now that the playground's //^? doesn't work pre-4.6.)
🙂 Expected behavior
foo is narrowed to Foo in the first if block, matching the narrowing in the other if blocks.