Przejdź do treści
webtype.orgwebtype.org

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Nr 227 · 4 sierpnia 2026 · Średnia

    Zawiera

    Zaimplementuj Includes<T, U>, aby zgłaszał, czy krotka T zawiera dokładnie typ U. boolean nie liczy się jako zawierające true — dopasowanie musi być dokładne. Equal z harnessa jest dostępne.

    01

    Spróbuj rozwiązać samodzielnie

    Par 3

    Zagadka

    includes-tuple.ts
    Podejście 1 z 3Jeszcze nie sprawdzone

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

    Testy

    4
    • Includes<[1, 2, 3], 2>—
      → true
    • Includes<[1, 2, 3], 4>—
      → false
    • Includes<[], 1>—
      → false
    • Includes<[boolean], true>—
      → false

    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 5 sierpnia 2026

    Rozwiązanie

    type Includes<T extends readonly unknown[], U> =
      T extends readonly [infer H, ...infer R]
        ? Equal<H, U> extends true
          ? true
          : Includes<R, U>
        : false

    Najczęstsza błędna odpowiedź

    type Includes<T extends readonly unknown[], U> =
      U extends T[number] ? true : false

    Krótkie i błędne. T[number] to unia typów elementów, a extends pyta o przypisywalność, więc Includes<[boolean], true> odpowiada true — true jest przypisywalne do boolean, choć krotka nie zawiera takiego elementu. Przypisywalność to nie przynależność.

    Linia po linii

    1. Equal<H, U> extends true

      Equal zwraca typ true albo false, więc trzeba go sprawdzać przez extends true, a nie używać wprost jako warunku. To zagadka, w której sam harness staje się narzędziem.

    2. : false

      Dojście do pustej krotki oznacza, że sprawdzono każdy element i żaden nie pasował. Wyczerpanie listy *jest* odpowiedzią przeczącą.

    Do zapamiętania

    Gdy zagadka mówi „dokładnie”, extends jest złym narzędziem — testuje przypisywalność, która jest jednokierunkowa. Dokładna tożsamość wymaga Equal — i dlatego każdy test na tej stronie jest na nim oparty.

    Wykorzystuje