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

时间:2019-09-30 04:08:40

标签: typescript

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

  1. 我想念什么吗?
  2. 打字稿编译器为什么不能推断该类型将是字符串?
    const getItem = () =>
      new Promise((resolve) => {
        return resolve('a title');
      });

    (async function() {
      const item1 = await getItem();
      const item2 = await getItem();
    })();

1 个答案:

答案 0 :(得分:3)

问题在于,无法通过传递给resolve方法的类型来推断Promise的类型。 resolve方法的类型从传递给Promise构造函数的泛型类型获取,而不是相反。同样,在这种情况下,您无需使用return和resolve。

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

  1. 您应传递string作为通用类型参数。使用Promise<string>((resolve) => { ...,它将告诉打字稿您希望将字符串传递给resolve函数。如果尝试通过其他方式调用resolve,将会看到类型错误。
  2. 如果您实际上并不在等待任何东西,而只想在Promise中包装字符串,则可以使用Promise.resolve('a title');之类的构造。这样,就可以推断出通用类型参数。