El compilador de Typescript no puede inferir el tipo de la llamada a resolve de Promise
Al usar el siguiente fragmento, el compilador no puede identificar los tipos para item1, lo asignará como desconocido (ver al pasar el cursor sobre el nombre de la variable en el Playground de Typescript)
¿Por qué el compilador de TypeScript no puede inferir que el tipo será una cadena?
const getItem = () =>
new Promise((resolve) => {
return resolve('a title');
});
(async function() {
const item1 = await getItem();
const item2 = await getItem();
})();
Respuesta #1
El problema es que no se puede inferir el tipo de la Promesa a partir del tipo pasado al método resolve. El método resolve obtiene su tipo del tipo genérico pasado al constructor de la Promesa, no al revés. Además, no necesitas usar return con resolve en este caso.
Puedes abordar esto de una de dos maneras.
- Debes pasar
stringcomo el parámetro de tipo genérico. UsaPromise<string>((resolve) => { ..., lo que le indicará a TypeScript que esperas que se pase una cadena al funciónresolve. Verás un error de tipo si intentas llamar aresolvecon otra cosa. - Puedes usar una construcción como
Promise.resolve('un título');si en realidad no estás esperando nada y solo quieres envolver una cadena en una promesa. De esta manera, se puede inferir el parámetro de tipo genérico.