Microsoft/TypeScript

Incorrectly reported `TS2322` error on array items after spread

Aperta

#55.340 aperta il 11 ago 2023

 (1 commento) (0 reazioni) (0 assegnatari)TypeScript (13.395 fork)batch import
BugDomain: Error MessagesHelp Wanted

Metriche repository

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

Descrizione

🔎 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.

Guida contributor