Rozwiązanie z komentarzem
Opublikowano 29 lipca 2026Rozwiązanie
type MyExclude<T, U> = T extends U ? never : TNajczęstsza błędna odpowiedź
type MyExclude<T, U> = [T] extends [U] ? never : TOwinięcie T w krotkę wyłącza dystrybucję, więc cała unia porównywana jest naraz. ["a" | "b" | "c"] extends ["a"] jest fałszem i cała unia wraca nieprzefiltrowana.
Linia po linii
T extends UTjest tu *nagie* — stoi samo po sprawdzanej stronie, nie owinięte w krotkę, tablicę ani obiekt. To dokładnie ten warunek uruchamia dystrybucję po unii.? never : TKażdy element albo staje się
never, albo przeżywa jako on sam. Złączenie wyników automatycznie usuwanever, boneverjest elementem neutralnym unii.
Do zapamiętania
Dystrybucja to różnica między pytaniem o unię a pytaniem o każdy jej element. [T] extends [U] to przełącznik, który ją wyłącza.

