Saltar al contenido
webtype.orgwebtype.org

    ↑↓ mover · ⏎ abrir · esc cerrar

    Operadores

    infer

    Declara una variable que el compilador rellena al encajar un patrón.

    Qué es

    Solo es legal en la cláusula extends de un tipo condicional, y solo se puede usar en la rama verdadera. Lee T extends Promise<infer U> como «¿se parece T a una promesa de algo y, si es así, llamemos a ese algo U?» — la misma forma que la desestructuración, llevada al nivel de tipos.

    Ejemplos

    • Unwrap<Promise<string>>
      →string
    • Unwrap<number>
      →number
    • Head<[1, 2, 3]>
      →1

      El mismo operador contra un patrón de tupla. A infer no le importa qué forma estés encajando.

    Cada tipo resuelto de arriba lo imprimió TypeScript 6.0.3, no se escribió a mano.

    Lo que no hace

    • No se puede usar en la rama falsa. U no existe allí, porque nada coincidió y no había nada que nombrar.
    • No elige uno cuando coinciden varios. Varios infer con el mismo nombre en una posición producen una unión, y en posiciones de argumento una intersección — lo cual es un truco, no un fallo.

    Conclusión

    Si puedes describir la forma que buscas, infer te entregará la pieza que querías de ella. Casi toda la astucia de la biblioteca estándar es este único operador.