Microsoft/TypeScript

Tuple Spread Inconsistencies When Intersected

Open

#60.539 aperta il 19 nov 2024

Vedi su GitHub
 (1 commento) (0 reazioni) (0 assegnatari)TypeScript (6726 fork)batch import
BugDomain: IntersectionHelp Wanted

Metriche repository

Star
 (48.455 star)
Metriche merge PR
 (Merge medio 6g 17h) (9 PR mergiate in 30 g)

Descrizione

🔎 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

https://www.typescriptlang.org/play/?#code/C4TwDgpgBAKgrmANtAvFA2gZ2AJwJYB2A5gDRQB0lBcAtgEYQ7oC6zA3AFCiSwLICSBYI0wQAxsDwB7AlDTwk0AGRQA3lDA4pYAFxRs+YlAC+nDl3DQFyAEoRsAQTFj7mOb0XoAjOw4B6PygggD0oanpGc24rPghBYRxRCWkCO0dnV3drOKERcUkZb18AoKhQg0IiKAAfMNoGHHMLHmyAZU0IAEMAE3d0SnJs4sDSsowK4jIB8IaWZijLDwFcxPyU9pwu3rR+ymz4vOSZYdLQgAoJqtqZxgBKFiA

💻 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

Guida contributor