Microsoft/TypeScript

ts2556 is too restrictive when generics are involved

Open

#57 322 ouverte le 7 févr. 2024

Voir sur GitHub
 (2 commentaires) (3 réactions) (0 assignés)TypeScript (6 726 forks)batch import
Domain: check: Type InferenceHelp WantedPossible Improvement

Métriques du dépôt

Stars
 (48 455 stars)
Métriques de merge PR
 (Merge moyen 6j 17h) (9 PRs mergées en 30 j)

Description

🔎 Search Terms

"generic", "tuple", "spread", "rest", "ts2556", "a spread argument must either have a tuple type or be passed to a rest parameter"

🕗 Version & Regression Information

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

⏯ Playground Link

https://www.typescriptlang.org/play?#code/CYUwxgNghgTiAEYD2A7AzgF3gMwFzwAoBKeAXgD54A3JAS2AFgAoZ0SWBZdLAD3zijBUEAJ7wA2gF1m2AgDoFPEgHpl8AO5IYAazTNmXTPAwgjpeAB4AKvBA8TKYGngChKURMnkCfeFZIUzPA48ooqakKm8ChIWJo6QA

💻 Code

declare const f: () => void

declare const x: readonly []
f(...x) // works

const test = <T extends readonly []>(x: T) =>
  f(...x) // does not work

🙁 Actual behavior

Attempting to spread a generically-typed value whose constraint guarantees tuple-ness into a compatible argument list is forbidden.

🙂 Expected behavior

I should be allowed to do this.

Additional information about the issue

Possibly-related issues:

Guide contributeur