Typescript 编译器无法从 Promise 解析调用推断类型

Fil*_*ype 3 types typescript

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

为什么打字稿编译器无法推断该类型将是字符串?

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

Mat*_*t H 9

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

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

  1. 您应该string作为泛型类型参数传递。使用Promise<string>((resolve) => { ...,这将告诉打字稿您希望将字符串传递给函数resolveresolve如果您尝试使用其他内容进行调用,您将看到类型错误。
  2. 您可以使用这样的结构:Promise.resolve('a title');如果您实际上并不在等待任何内容,而只是想将字符串包装在 Promise 中。这样,就可以推断出泛型类型参数。