Microsoft/TypeScript

Narrow subtype-reduction-prone unions to their narrowest constituent

Aperta

#47.731 aperta il 3 feb 2022

 (6 commenti) (1 reazione) (0 assegnatari)TypeScript (13.395 fork)batch import
BugDomain: check: Control FlowHelp Wanted

Metriche repository

Star
 (108.860 stelle)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

Bug Report

Type narrowing doesn't seem to take into account an assignment I made to ensure the variable has the right type.

Maybe related? https://github.com/microsoft/TypeScript/issues/43584#issuecomment-816932485

🔎 Search Terms

type narrowing assignment

🕗 Version & Regression Information

4.5.4

  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about "type narrowing"

⏯ Playground Link

Playground Link

💻 Code

declare let a: object | any[] | undefined

if (a === undefined) {
    a = [] // I expect this line to have TS understand that a is any[] from now on
} else if (!Array.isArray(a)) {
    throw new Error()
}
[...a] // complains here because a is object | any[]

🙁 Actual behavior

a has type object | any[]

🙂 Expected behavior

a to have type any[]

Guida contributor