Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 260 · 12 września 2026 · Trudna

    Jak długi jest

    Zaimplementuj StrLength<S>, aby dawał liczbę znaków literału tekstowego S.

    01

    Spróbuj rozwiązać samodzielnie

    Par 4

    Zagadka

    string-length.ts
    Podejście 1 z 4Jeszcze nie sprawdzone

    Zastąp ??? — rozwiązanie sprawdzamy przypadkami poniżej. Tab wcina; naciśnij Escape, a potem Tab, by wyjść fokusem.

    Testy

    3
    • StrLength<'hello'>—
      → 5
    • StrLength<''>—
      → 0
    • StrLength<'ab'>—
      → 2

    Jak oceniamy test Dokładna równość typów, nie przypisywalność — przecięcie to nie to samo co spłaszczony obiekt.

    Jak poszło innym

    Tę zagadkę rozwiązało jak dotąd mniej niż 5 osób. Rozkład pojawi się, gdy próbka będzie na tyle duża, by coś znaczyć.

    Gra na krótkim dystansie

    Najmniej znaków

    Nie ma jeszcze publicznych wyników.

    Archiwum
    02

    Rozwiązanie z komentarzem

    Opublikowano 13 września 2026

    Rozwiązanie

    type StrLength<S extends string, R extends unknown[] = []> =
      S extends `${string}${infer Rest}` ? StrLength<Rest, [...R, unknown]> : R['length']

    Najczęstsza błędna odpowiedź

    type StrLength<S extends string, R extends unknown[] = []> = S['length']

    Typ tekstowy owszem ma length i jest nią number — ta ogólna, nie 5. Tylko krotki niosą swoją długość jako typ literalny. To dlatego niemal każdy liczący typ w TypeScripcie pisze się z krotkowym akumulatorem, którego zawartości nikt nigdy nie czyta.

    Linia po linii

    1. `${string}${infer Rest}`

      Pierwszy symbol zastępczy to string, a nie infer, bo sam znak nie ma znaczenia — liczy się tylko to, że jakiś był.

    2. [...R, unknown]

      Akumulator to karbowanie. Typ jego elementów jest bez znaczenia; unknown wybrano właśnie dlatego, że nikt nigdy do środka nie zajrzy.

    3. R['length']

      A tutaj karby są spieniężane. Ponieważ R jest krotką, jej length to literał 5 — dokładnie to, o co pyta sprawdzenie.

    Do zapamiętania

    Liczby na poziomie typów to długości krotek. Ilekroć musisz coś policzyć, odpowiedzią jest krotka, którą powiększasz, a potem pytasz o jej długość.

    Wykorzystuje