microsoft / microsoft/TypeScript
Wrong spread parameters type inference in function with all spread parameters overloads
Open
Nobody has claimed this yet.
Domain: check: Type Inference
Possible Improvement
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 117
Description
Bug Report
🔎 Search Terms
overload tuple spread
⏯ Playground Link
Playground link with relevant code
💻 Code
type A<K extends [any], V extends [any]> =
& { (...args: [...K]): void }
& { (...args: [...K, ...V]): void }
// Now: (parameter) args: ([...K][0] | [...K, ...V][0])[]
// Expected: (parameter) args: [...K] | [...K, ...V]
const f = <K extends [any], V extends [any]>(): A<K, V> => (...args) => {}
🙁 Actual behavior
args have type ([...K][0] | [...K, ...V][0])[]
🙂 Expected behavior
args have type [...K] | [...K, ...V]
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the linked TypeScript Playground and reduce the example while preserving the overloads with tuple spreads. Trace how the compiler infers the rest parameter for the intersected call signatures, then add a regression test covering the shown actual and expected types; done means args is inferred as the tuple union rather than an array of element unions.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 42/100