Rozwiązanie z komentarzem
Opublikowano 8 września 2026Rozwiązanie
type First<T extends readonly unknown[]> = T extends [infer H, ...unknown[]] ? H : neverNajczęstsza błędna odpowiedź
type First<T extends readonly unknown[]> = T extends [infer H] ? H : neverJednoelementowy wzorzec pasuje do jednoelementowych krotek i do niczego więcej. First<[string]> działa, First<[1, 2, 3]> spada prosto do never, a zagadka wygląda na w połowie rozwiązaną, bo jedno sprawdzenie przechodzi. Wzorzec musi powiedzieć „a potem cokolwiek”.
Linia po linii
[infer H, ...unknown[]]Reszta jest rozwinięta jako
unknown[], a nie wywnioskowana, bo nic jej tu nie potrzebuje. Nazywanie tego, czego nie użyjesz, to najczęstszy sposób, w jaki te wzorce robią się trudniejsze do czytania, niż są.: neverneverto uczciwa odpowiedź na „nie ma takiego elementu” — a nieundefined, które twierdziłoby, że element jest, tylko brakuje jego wartości.
Do zapamiętania
Wzorce krotek są dosłowne. [H] znaczy „krotka długości jeden”, a jeśli chodziło ci o „co najmniej jeden”, musisz dopisać resztę.

