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.
Example
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.