Skip to content

    ↑↓ move · ⏎ open · esc close

    TS2493

    Past the end of the tuple

    Tuple type 'Pair' of length '2' has no element at index '2'.

    The compiler’s own words. Not translated — this is the string you pasted into a search box.

    A tuple knows exactly how long it is, so indexing past the end is a compile-time error rather than an `undefined` you find out about later.

    Reproduction

    type Pair = [number, number]
    
    type Third = Pair[2]

    The build asserts this emits exactly this code.

    Why the compiler says this

    This is the difference between a tuple and an array, stated as an error. `number[]` would answer `number` for any index because it makes no promise about length; `[number, number]` promises exactly two, and that promise is what lets `length` be the literal `2` — the fact every counting type on this site is built on. The strictness that stops you here is the same strictness that makes tuples useful at the type level.

    Fixes

    1. 01
      type Pair = [number, number]
      
      type Second = Pair[1]

      Index inside the range. Tuple indices are zero-based, and the last one is always `length - 1`.

    2. 02
      type Pair = [number, number]
      
      type Any = Pair[number]

      Or ask for any element with `[number]`, which gives the union of everything in the tuple and cannot be out of range by construction.

    Takeaway

    If you are indexing a tuple with a number you computed, you probably want `[number]` — or a recursive type that walks it one element at a time.

    Where to go next

    Errors