Microsoft/TypeScript
Auf GitHub ansehenTuple Spread Inconsistencies When Intersected
Open
#60.539 geöffnet am 19. Nov. 2024
BugDomain: IntersectionHelp Wanted
Repository-Metriken
- Stars
- (48.455 Stars)
- PR-Merge-Metriken
- (Durchschn. Merge 6T 17h) (9 gemergte PRs in 30 T)
Beschreibung
🔎 Search Terms
Tuple, Intersection, Spread
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about tuples and arrays
⏯ Playground Link
💻 Code
type Tuple = [string, ...number[]];
type TupleIntersection = Tuple & { prop: string };
type TupleRestAccess = Tuple[1];
// ^ number
type TupleIntersectionRestAccess = TupleIntersection[1];
// ^ string | number
type TupleSpread = [...Tuple];
// ^ [string, ...number[]]
type TupleIntersectionSpread = [...TupleIntersection];
// ^ (string | number)[]
🙁 Actual behavior
TupleIntersection[1] and [...TupleIntersection] both seem to use an overly broad type, matching the number index signature instead of the more narrow spread signature.
What I mean is that TupleIntersection[1] behaves just like Tuple[number] does. This leads me to believe that the number index signature is synthesized correctly but the logic for numeric literals in the range of the spread signature aren't handled.
🙂 Expected behavior
I expected Tuple's behaviour to match TupleIntersection.
Additional information about the issue
No response