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
inferno 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.
Uno existe allí, porque nada coincidió y no había nada que nombrar. - No elige uno cuando coinciden varios. Varios
infercon 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.

