zerocewl
zerocewl

Reputation: 12804

What are “named or labeled tuples” in Typescript?

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

Answers (1)

Dietrich Epp
Dietrich Epp

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.

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.

Upvotes: 55

Related Questions