Microsoft/TypeScript

Incorrectly reported `TS2322` error on array items after spread

Offen

#55.340 geöffnet am 11.08.2023

 (1 Kommentar) (0 Reaktionen) (0 zugewiesene Personen)TypeScript (13.395 Forks)batch import
BugDomain: Error MessagesHelp Wanted

Repository-Metriken

Stars
 (108.860 Sterne)
PR-Merge-Metriken
 (PR-Metriken ausstehend)

Beschreibung

🔎 Search Terms

"array spread", "TS2322"

🕗 Version & Regression Information

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

⏯ Playground Link

https://www.typescriptlang.org/play?#code/MYewdgzgLgBAhgLhgQQE6rgTwDxgK4C2ARgKaowA+M0qAlmAOYB8MAvDANoC6A3AFChIsIkjQYc+YmRbsOAOgVwANDACMvIA

💻 Code

const a: Array<number | string> = [];
const b: Array<number> = [...a, 1];

🙁 Actual behavior

The compiler gives the following two errors, of which only one is appropriate:

~/prog/typescript ❯ tsc ./array-spread-error.ts
array-spread-error.ts:2:27 - error TS2322: Type 'string | number' is not assignable to type 'number'.
  Type 'string' is not assignable to type 'number'.

2 const b: Array<number> = [...a, 1];
                            ~~~~

array-spread-error.ts:2:33 - error TS2322: Type 'string | number' is not assignable to type 'number'.
  Type 'string' is not assignable to type 'number'.

2 const b: Array<number> = [...a, 1];
                                  ~

🙂 Expected behavior

The spread is clearly incorrect, as the original array could potentially contain strings as well, but the number literal should not be marked with the same error.

Contributor Guide