Przejdź do treści

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    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

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

      Indeksuj w zakresie. Indeksy krotki liczone są od zera, a ostatni to zawsze `length - 1`.

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

    Dokąd dalej

    Błędy