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>>→stringUnwrap<number>→numberHead<[1, 2, 3]>
→1El 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.