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

Jer*_* M. 8 typescript

我希望type 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()));
  }
Run Code Online (Sandbox Code Playgroud)

打字稿错误:

'Type'Promise <void []>'不能分配给'Promise <void>'.类型'void []'不能分配给'void'类型.'

我可以用以下两种方式解决这个问题:

  1. 将deleteMany标记为返回Promise <void []>.
  2. 承诺链到Promise.all,返回已解决的承诺.例如

    return Promise.all(list.map((x) => x.delete())).then(() => Promise.resolve());
    
    Run Code Online (Sandbox Code Playgroud)

第二个更糟糕,因为那段代码在JavaScript中执行,但第一个代码让开发人员感到困惑.Typescript对Promise.all的支持是否很差,还是在文档中省略了?有谁找到更好的解决方案?

Eri*_*pal 6

1(Mark deleteMany as returns 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()));
  }
Run Code Online (Sandbox Code Playgroud)

该功能的行为方式完全相同.