我希望类型 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'.'
我可以用我知道的两种方法解决这个问题:
- 将 deleteMany 标记为返回 Promise
。 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/