Búsqueda de sitios web

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.

  1. Debes pasar string como el parámetro de tipo genérico. Usa Promise<string>((resolve) => { ..., lo que le indicará a TypeScript que esperas que se pase una cadena al función resolve. Verás un error de tipo si intentas llamar a resolve con otra cosa.
  2. 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.

Artículos relacionados