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 trueEqualzwraca typtruealbofalse, więc trzeba go sprawdzać przezextends 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.

