首页 > 解决方案 > Typescript 编译器无法从 Promise 解析调用中推断类型

问题描述

使用以下代码段时,编译器无法识别 的类型item1,它将分配为未知(请参阅将鼠标悬停在Typescript Playground上的 var 名称时

为什么打字稿编译器不能推断出该类型将是一个字符串?

    const getItem = () =>
      new Promise((resolve) => {
        return resolve('a title');
      });
    
    (async function() {
      const item1 = await getItem();
      const item2 = await getItem();
    })();

标签: typescripttypes

解决方案


问题是 Promise 的类型无法从传递给 resolve 方法的类型中推断出来。resolve 方法从传递给 Promise 构造函数的泛型类型中获取其类型,而不是相反。在这种情况下,您也不需要使用returnwith resolve。

您可以通过以下两种方式之一解决此问题。

  1. string您应该作为泛型类型参数传递。使用Promise<string>((resolve) => { ...,它将告诉 typescript 您希望将字符串传递给resolve函数。如果你尝试resolve用其他东西调用,你会看到一个类型错误。
  2. Promise.resolve('a title');如果您实际上并没有在等待任何东西,而只是想将一个字符串包装在一个 Promise 中,那么您可以使用这样的结构。这样,可以推断出泛型类型参数。

推荐阅读