Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    N.º 221 · 29 de julio de 2026 · Media

    Tipo de retorno

    Implementa MyReturnType<T> para que extraiga lo que devuelve un tipo función, sean cuales sean sus parámetros. Lo que no sea una función devuelve never.

    01

    Intenta el puzle tú mismo

    Par 3

    Puzle

    return-type.ts
    Intento 1 de 3Aún sin comprobar

    Sustituye ??? — tu solución se comprueba con los casos de abajo. Tab indenta; pulsa Escape y luego Tab para sacar el foco.

    Comprobaciones

    4
    • MyReturnType<() => string>—
      → string
    • MyReturnType<(a: number) => boolean>—
      → boolean
    • MyReturnType<() => void>—
      → void
    • MyReturnType<string>—
      → never

    Cómo se juzga una comprobación Igualdad exacta de tipos, no asignabilidad — una intersección no es lo mismo que el objeto aplanado.

    Cómo le fue a todo el mundo

    Menos de 5 personas han resuelto este puzle hasta ahora. La distribución aparece cuando la muestra sea lo bastante grande como para significar algo.

    Juego corto

    Menos caracteres

    Aún no hay marcas públicas.

    Archivo
    02

    Solución comentada

    Publicado el 30 de julio de 2026

    La solución

    type MyReturnType<T> = T extends (...args: never[]) => infer R ? R : never

    El error más común

    type MyReturnType<T> = T extends () => infer R ? R : never

    Un 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

    1. (...args: never[]) => infer R

      Como 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 a any.

    2. infer R

      infer en 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.

    Usa