Rozwiązanie z komentarzem
Opublikowano 1 września 2026Rozwiązanie
type IsNever<T> = [T] extends [never] ? true : falseNajczęstsza błędna odpowiedź
type IsNever<T> = T extends never ? true : falseTo zwraca never, nie true. Typ warunkowy z gołym parametrem typu dystrybuuje się po uniach, a never to unia pusta — nie ma więc żadnych składników do rozdzielenia, warunek nie wykonuje się ani razu i wynikiem znów jest unia pusta.
Linia po linii
[T] extends [never]Owinięcie w krotkę nie jest ozdobą: sprawia, że lewa strona przestaje być gołym parametrem typu, co wyłącza dystrybucję i pozwala porównać sam
never.IsNever<never | string>never | stringto po prostustring—neverznika z unii w chwili, gdy do niej wchodzi. Odpowiedź brzmifalse, bo typ, który przyszedł, od początku nie byłnever.
Do zapamiętania
never to unia pusta i ten jeden fakt tłumaczy większość jego dziwnych zachowań: dystrybucja po nim nie robi nic, a on sam znika z każdej unii, do której trafi.

