Microsoft/TypeScript

Condition aliasing doesn't capture optional chain expressions

Open

#49.075 geöffnet am 11. Mai 2022

Auf GitHub ansehen
 (4 Kommentare) (1 Reaktion) (0 zugewiesene Personen)TypeScript (6.726 Forks)batch import
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

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.

Contributor Guide