Przejdź do treści
webtype.orgVariadic tuples

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Konstrukcje

    Variadic tuples

    Rozwijanie i dopasowywanie krotek po pozycji — tak poziom typów robi listy.

    Czym jest

    Krotka zna swoją długość jako typ literalny i na tym fakcie zbudowany jest każdy typ liczący. Połącz to ze wzorcami głowa-i-reszta, a masz rekurencję po liście: odetnij element, zrób coś, wywołaj się na reszcie. Listy parametrów też są krotkami i dlatego te same techniki przepisują sygnatury funkcji.

    Przykłady

    • Push<[1, 2], 3>
      [1, 2, 3]
    • Tail<[1, 2, 3]>
      [2, 3]
    • ['a', 'b']['length']
      2

      Literalna długość. Tablica odpowiedziałaby tu `number`, a ta różnica jest całym powodem, dla którego krotki mają na poziomie typów znaczenie.

    Każdy rozwinięty typ powyżej wypisał TypeScript 5.9.3, nie ręka człowieka.

    Czego nie robi

    • Nie pozwala indeksować poza koniec. Długość krotki jest obietnicą, a TS2493 to kompilator jej dotrzymujący.
    • Nie rekurencjonuje bez końca. Liczenie po jednym elemencie trafia w sufit instancjacji około pięćdziesięciu, co jest TS2589 i nie da się tego podkręcić.

    Wniosek

    Gdy potrzebujesz liczby na poziomie typów, prawie zawsze chcesz krotki, którą powiększasz, a potem pytasz o jej długość. Zawartości nikt nie czyta.