Saltar al contenido

    ↑↓ 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 5.9.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.