Solución comentada
Publicado el 30 de julio de 2026La solución
type MyReturnType<T> = T extends (...args: never[]) => infer R ? R : neverEl error más común
type MyReturnType<T> = T extends () => infer R ? R : neverUn patrón sin parámetros solo encaja con funciones sin parámetros, así que (a: number) => boolean cae en never. El patrón debe ser permisivo con los parámetros para serlo con las firmas.
Línea por línea
(...args: never[]) => infer RComo los parámetros son contravariantes, una lista de parámetros
never[]es asignable *desde* cualquier otra. Es la forma segura de escribir «una función de cualquier forma» sin recurrir aany.infer Rinferen posición de retorno pide al compilador que resuelva lo que haya ahí. Es el mismo mecanismo que inferir el tipo de elemento de un array — solo cambia la posición.
Para recordar
infer puede ir en cualquier sitio donde quepa un tipo dentro de un patrón. Casi todos los helpers de extracción de la librería estándar son un condicional con un infer bien colocado.

