Rozwiązanie z komentarzem
Opublikowano 5 sierpnia 2026Rozwią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
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.
: falseDojś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.