BugDomain: IntersectionHelp Wanted
倉庫指標
- Star
- (48,455 star)
- PR 合併指標
- (平均合併 6天 17小時) (30 天內合併 9 個 PR)
描述
🔎 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