【问题标题】:Type '{}' is not assignable to type 'number'类型“{}”不可分配给类型“数字”
【发布时间】:2018-02-24 05:45:52
【问题描述】:

所以我理解 async/await 背后的想法只是使用 Promise 的一种更漂亮的方式,但显然我没有正确理解它。

async function a(): Promise <number> {
  return 5;
}

这很好,返回一个用结果 5 解决的承诺。

async function a(): Promise <number> {
  return await new Promise(resolve => {
    resolve(5);
  });
}

错误 TS2322:类型“{}”不可分配给类型“数字”。
类型“{}”中缺少属性“includes”。

据我了解,await 将等待 promise 解决并返回结果,在本例中为 5,应该像上面的示例一样工作?

【问题讨论】:

  • Type '{}' is not assignable to type 'number' 似乎是一个更合适的标题。
  • 你为什么在 async/await 中使用 promise?
  • @HarshPatel 如果你有一个可以在a() 中处理回调的函数,你会怎么写?
  • 我打开了一个关于类型警告的错误:github.com/Microsoft/TypeScript/issues/23114

标签: javascript typescript async-await


【解决方案1】:

默认情况下,new Promise() 等同于 new Promise&lt;{}&gt;

你内部的 Promise 返回的不是一个数字,而是一个对象。您需要确保编译器它是带有类型号的 Promise。

await new Promise 替换为await new Promise&lt;number&gt;

async function a(): Promise<number> {
  return await new Promise<number>(resolve => {
    resolve(5);
  });
}

还要检查你的代码,我认为你可以在没有中间 Promise 的情况下使用你的代码

async function a(): Promise<number> {
      return await 5;
}

【讨论】:

  • 这是一个简化的例子,显然我需要中间的承诺:D
猜你喜欢
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 2021-10-11
  • 2019-06-02
  • 2021-06-03
  • 1970-01-01
  • 2018-01-04
相关资源
最近更新 更多