microsoft / microsoft/TypeScript
Rest tuple parameter with intersection/union places error on wrong argument
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 132
Description
TypeScript Version: 3.2.0-dev.20181113
Search Terms:
rest tuple, intersection, union, error, argument, misplaced
Code
declare function boop<T extends any[]>(...args: T & [number, string]): void;
boop(123, 456); // error
// ~~~ <-- error on first argument
// Argument of type '[123, 456]' is not assignable to parameter
// of type '[number, number] & [number, string]'.
// Type '[123, 456]' is not assignable to type '[number, string]'.
// Type '456' is not assignable to type 'string'.
Expected behavior:
I expect an error on the second argument (456), since that's the argument that causes the failure, as made evident by the error message. (Or possibly I expect an error on both arguments, if it's interpreted as a failure to match the rest parameter.)
Actual behavior:
The actual error is on the first argument (123). This is a minor problem, and it only seems to show up in the intersection-with-type-parameter situation above (concrete types like ...args: [number, string] & [number, string] work fine), but I figured I'd report it in case it has an easy fix.
(Note to self or interested non-selves: ran into this in a Stack Overflow answer)
Playground Link:
🔗
Related Issues:
Haven't found anything. Anyone find anything?
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 provided TypeScript Playground reproduction and compare the reported diagnostic span with the expected failing argument. Trace the compiler's handling of rest tuple parameters combined with a type-parameter intersection, then verify that the diagnostic points to the second argument without regressing the concrete intersection case.
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
- Mostly clear
- Newbie friendliness
- 35/100