gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:37:37 24 4
gpt4 key购买 nike

我希望类型 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com