TS2493
Poza końcem krotki
Tuple type 'Pair' of length '2' has no element at index '2'.Własne słowa kompilatora. Nietłumaczone — to ten ciąg, który wkleiłeś w wyszukiwarkę.
Krotka wie dokładnie, jak jest długa, więc indeksowanie poza koniec jest błędem kompilacji, a nie undefined, o którym dowiesz się później.
Odtworzenie
type Pair = [number, number] type Third = Pair[2]
Build potwierdza, że to emituje dokładnie ten kod.
Dlaczego kompilator tak mówi
To różnica między krotką a tablicą, wyrażona jako błąd. number[] odpowiedziałoby number na dowolny indeks, bo nie obiecuje niczego o długości; [number, number] obiecuje dokładnie dwa, a właśnie ta obietnica sprawia, że length jest literałem 2 — faktem, na którym zbudowany jest każdy liczący typ na tej stronie. Surowość, która cię tu zatrzymuje, to ta sama surowość, która czyni krotki użytecznymi na poziomie typów.
Naprawy
- 01
type Pair = [number, number] type Second = Pair[1]
Indeksuj w zakresie. Indeksy krotki liczone są od zera, a ostatni to zawsze
length - 1. - 02
type Pair = [number, number] type Any = Pair[number]
Albo poproś o dowolny element przez
[number], co daje unię wszystkiego w krotce i z definicji nie może wyjść poza zakres.
Wniosek
Jeśli indeksujesz krotkę obliczoną liczbą, prawdopodobnie chcesz [number] — albo typu rekurencyjnego, który przejdzie ją element po elemencie.

