Angular和ngrx:删除tap()会导致编译错误



我有一段代码(稍微简化(可以正常工作,控制台日志可以正确显示所有内容,传递的参数是有效的(并且不是空的(:

return observable.pipe(map(response => ({ response, param2, param3, param4, param5 })));
}),
tap(({ response }) => {
if (this.hasNotifications(response?.notif)) {
//do something
}
}),
filter(({ response }) => !this.hasNotifications(response?.notif)),
tap(() => console.log('we are here')),
switchMap(({ response, param2, param3, param4, param5 }) => {
console.log('and even here');
console.log(response);
console.log(param2);
console.log(param3);
console.log(param4);
console.log(param5);

不幸的是,如果我删除

tap(() => console.log('we are here')),

由于它只是为了开发目的而插入的,我无法成功编译,因为出现了以下错误:

error TS2339: Property 'param2' does not exist on type '{ response: any; }'.
305     switchMap(({ response, param2, param3, param4, param5 }) => {

param3、param4、param5也是如此。

有什么想法吗?为什么会出现错误,以及如何修复它们,使参数仍然正确通过?

我猜这段代码是为传递许多参数(作为属性对象(的Action发出的Reducer或Effect编写的。如果是这样,那么您可以通过将参数对象{response,param2,param3,param4,param5}替换为仅"response"来解决问题,然后将所有参数作为对象"response(响应("中的成员获取,如下所示:

switchMap((response) => {
console.log('and even here');
console.log(response);
console.log(response.param2);
console.log(response.param3);
console.log(response.param4);
console.log(response.param5);
}

最新更新