Microsoft/TypeScript

Incorrectly reported `TS2322` error on array items after spread

Aberta

#55.340 aberto em 11 de ago. de 2023

 (1 comentário) (0 reação) (0 responsável)TypeScript (13.395 forks)batch import
BugDomain: Error MessagesHelp Wanted

Métricas do repositório

Stars
 (108.860 estrelas)
Métricas de merge de PR
 (Métricas PR pendentes)

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.

Guia do colaborador