Reputation: 12804
Reading the changes in Typescript 4.0, I found the new feature:
Labeled Tuple Elements
I thought elements could either be indexed by numbers (like in tuples and lists) or by keys (like in dicts). I don't expected they could be indexed both ways.
my questions is:
Upvotes: 34
Views: 20659
Reputation: 213648
This is purely for documentation purposes, it has no semantics. They are just a way of putting names in the type signature--they type check identically to tuples without names, and the runtime behavior is identical as well.
While these have no impact on type-checking, the lack of labels on tuple positions can make them harder to use – harder to communicate our intent.
Emphasis added.
Use them whenever you want to document what the names of elements in a tuple are in the type signature of a function that uses them.
You might have a Range
type, which is [start, end]
:
type Range = [start: number, end: number];
Or your Range
type might be [start, length]
:
type Range = [start: number, length: number];
Or you could use unnamed tuples:
type Range = [number, number];
These three definitions have identical semantics as far as TypeScript is concerned. You can access the members through destructuring by array access (e.g. arr[0]
), just like any other array--they are not special. You cannot access the elements by name... again, these are just ordinary JavaScript array objects.
Upvotes: 55