Microsoft/TypeScript

Incorrectly reported `TS2322` error on array items after spread

Ouverte

#55 340 ouverte le 11 août 2023

 (1 commentaire) (0 réaction) (0 personne assignée)TypeScript (13 395 forks)batch import
BugDomain: Error MessagesHelp Wanted

Métriques du dépôt

Stars
 (108 860 étoiles)
Métriques de merge PR
 (Métriques PR en attente)

Description

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

Guide contributeur