typescript - 类型 Void[] 数组不可分配给类型 Void

标签 typescript

我希望类型 void[] 与类型 void 兼容。具体来说,当使用 Promise.all 时。

class Foo {
  delete(): Promise<void> {
    // do delete
    return Promise.resolve();
  }
  deleteMany(list: Foo[]): Promise<void> {
    return Promise.all(list.map((x) => x.delete()));
  }

typescript 错误:

'Type 'Promise<void[]>' is not assignable to type 'Promise<void>'. Type 'void[]' is not assignable to type 'void'.'

我可以用我知道的两种方法解决这个问题:

  1. 将 deleteMany 标记为返回 Promise
  2. Promise 链到 Promise.all,以返回已解决的 promise。例如

    return Promise.all(list.map((x) => x.delete())).then(() => Promise.resolve());
    

第二个更糟糕,因为那部分代码在 JavaScript 中执行,但第一个让开发人员感到困惑。 Typescript 对 Promise.all 的支持是否很差,或者它是否在文档中被遗漏了?有人找到更好的解决方案吗?

最佳答案

1(将 deleteMany 标记为返回 Promise<void[]>)绝对没问题,至少对我来说是这样。

但是,您可以使用 async/await如果你真的想返回 Promise<void> :

class Foo {
  delete(): Promise<void> {
    // do delete
    return Promise.resolve();
  }
  async deleteMany(list: Foo[]): Promise<void> {
    await Promise.all(list.map((x) => x.delete()));
  }

函数的行为方式完全相同。

关于typescript - 类型 Void[] 数组不可分配给类型 Void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43597503/

相关文章:

typescript - VSCode 扩展 : How to debug "Activating extension ' undefined_publisher. 扩展名'失败 : Unexpected token {.“

javascript - angular 2 访问组件内的 ng-content

reactjs - 使用 Material ui createStyles

javascript - TypeScript 有 NaN 类型吗?

typescript - 如何在运行时获取 TypeScript 枚举类型的名称?

javascript - Ionic 2 - 隐藏子页面上的标签

javascript - typescript 装饰器困惑

typescript - 在 TypeScript 中,为什么异步函数不能返回 T | 类型的联合 promise <T>?

javascript - Angular 14 - 未捕获( promise ): NullInjectorError: R3InjectorError(Standalone[z])[s -> s -> s]:

javascript - 在 JavaScript/Typescript 中将字符串数组转换为对象,最里面的子元素为空数组