Microsoft/TypeScript
Auf GitHub ansehenIndexing tuple intersection type beyond length produces unexpected type
Open
#42.557 geöffnet am 30. Jan. 2021
BugDomain: IntersectionHelp Wanted
Repository-Metriken
- Stars
- (48.455 Stars)
- PR-Merge-Metriken
- (Durchschn. Merge 6T 17h) (9 gemergte PRs in 30 T)
Beschreibung
Bug Report
🔎 Search Terms
tuple intersection index type
⏯ Playground Link
💻 Code
type T = [number, boolean] & { x: string };
declare const t: T;
const a = t[0]; // number
const b = t[1]; // boolean
const c = t[2]; // number | boolean !?
🙁 Actual behavior
c is typed as number | boolean
🙂 Expected behavior
c should be typed as undefined
I'm not sure if this is a bug, or intended behavior. But it was surprising. If the type is just a tuple, indexing beyond its length produced undefined. But if it is part of an intersection, the element type is changed to number | boolean, as if it is no longer a tuple, but an array. However, indexing 0 or 1 still produces the correct type for those element positions.