Rozwiązanie z komentarzem
Opublikowano 30 lipca 2026Rozwiązanie
type MyReturnType<T> = T extends (...args: never[]) => infer R ? R : neverNajczęstsza błędna odpowiedź
type MyReturnType<T> = T extends () => infer R ? R : neverWzorzec bez parametrów pasuje tylko do funkcji bez parametrów, więc (a: number) => boolean wpada do never. Wzorzec musi być pobłażliwy wobec parametrów, by być pobłażliwym wobec sygnatur.
Linia po linii
(...args: never[]) => infer RPonieważ parametry są kontrawariantne, lista parametrów
never[]jest przypisywalna *z* każdej innej listy. To bezpieczny sposób na zapisanie „funkcja dowolnego kształtu” bez sięgania poany.infer Rinferw pozycji zwracanej prosi kompilator o rozwiązanie tego, co tam stoi. To ten sam mechanizm co wnioskowanie typu elementu z tablicy — zmienia się tylko pozycja.
Do zapamiętania
infer można umieścić wszędzie tam, gdzie we wzorcu może pojawić się typ. Większość pomocników wyciągających z biblioteki standardowej to jeden warunek z jednym infer we właściwym miejscu.

