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.