Asíncrono
Awaited
Lo que obtienes tras un await — sin importar cuántas promesas de profundidad hubiera.
Qué es
El único integrado de esta página que recursa. Modela `await`, no el desempaquetado de `Promise`: una promesa de una promesa se aplana, igual que en tiempo de ejecución, y lo que no es promesa pasa sin cambios. Leer la definición es la forma más rápida de entender por qué las promesas anidadas nunca fueron algo de lo que ocuparse.
Ejemplos
Awaited<Promise<string>>→stringAwaited<Promise<Promise<number>>>→numberAplanado del todo, porque `await` hace lo mismo.
Awaited<string>→stringHacer await de algo que no es una promesa es legal y no hace nada, y el tipo lo refleja.
Cada tipo resuelto de arriba lo imprimió TypeScript 5.9.3, no se escribió a mano.
Lo que no hace
- No desempaqueta nada dentro de un objeto. `Awaited<{ a: Promise<string> }>` no cambia — esto sigue a `await`, y `await` no recorre tus propiedades.
- No describe el rechazo. La vía de error no tiene tipo alguno en TypeScript, y por eso un error capturado es `unknown`.
Conclusión
Usa `Awaited<ReturnType<typeof fn>>` para el resultado resuelto de una función asíncrona. Ese par aparece más que cualquiera de los dos por separado.