我在TypeScript中有以下功能:
private async deleteSelectedLuminaires (): Promise<any[]> {
return this.dialogService.open({ viewModel: DeleteLuminaire, model: 'Cancel or Ok', lock: false })
.whenClosed((response) => {
if (!response.wasCancelled) {
const requests = this.selectedSerials
.map(async (serial) => this.luminaireApi.removeLuminaire({ serial }))
return Promise.all(requests)
}
})
}
this.luminaireApi.removeLuminaire函数返回Promise&lt;无效&gt;。 在这个函数中,我通过Dialog服务提出一个问题来删除一些项目。 当我删除对话框时,一切正常,但上面的代码给了我以下错误:
错误TS2345:类型的参数'(响应:DialogCloseResult)=&gt; 承诺| undefined'不能分配给类型的参数 '(value:DialogCloseResult)=&gt;任何[] | PromiseLike”。类型 '承诺| undefined'不能赋值为'any [] | PromiseLike”。 类型'undefined'不是 可分配给'any [] | PromiseLike”。
我确定问题是一起使用对话框和Promise.all,但我不知道为什么。 你能帮我解决一下吗?
答案 0 :(得分:1)
看起来你有一个方法可以返回 一个Promise
或undefined
(即你在代码分支中缺少一个return语句)。
这就是(response: DialogCloseResult) => Promise | undefined
所指的内容。
您的问题的解决方案是确保处理DialogCloseResult的方法仅返回Promise,而不是未定义。如果您无法控制该签名,则可能需要类型保护,或在该返回值上键入断言。
Type Guard
if (typeof returnValue !== 'undefined') {
// Then it is a promise here
}
键入断言
promiseValue = <Promise>returnValue;
答案 1 :(得分:0)
我解决了,正如你在这里看到的那样:
private async deleteSelectedLuminaires (): Promise<any> {
let promises: Promise<any>
return this.dialogService.open({ viewModel: DeleteEntries, model: 'Cancel or Ok', lock: false })
.whenClosed(async (response) => {
if (!response.wasCancelled) {
promises = Promise.all(this.selectedSerials
.map(async (serial) => this.luminaireApi.removeLuminaire({ serial })))
}
return promises
})
}