我有以下代码
const updatedItems$ = this.itemChangeSubject.asObservable().pipe(
exhaustMap(itemChange =>
this.myService.changeItemStatus(
this.accountId,
itemChange.item.id
)
.pipe(
mergeMap(() => getItemsAndCache()),
catchError(() => lastItems$.pipe(first())
))
),
tap({
next: itemChange => {
const itemStatus = itemChange.item.isItemChanged ? 'changed' : 'unchanged';
this.clicked = false;
this.alerts.success({
message: `Item is now ${itemStatus}.`
});
}
})
)
在第一个exhaustMap
上的itemChange
参数中,我可以访问其中包含的item
对象。然而,在下面的抽头中尝试这样做时,我得到了一个错误Property 'item' does not exist on type 'unknown'
。如何解决此问题,以便可以像在exhaustMap
中使用itemChange
一样使用它?
您试图在错误的位置访问itemChange
。为了访问它,您必须将tap
操作员放置在pipe
中的正确位置,如下所示,
const updatedItems$ = this.itemChangeSubject.asObservable().pipe(
exhaustMap(itemChange =>
this.myService.changeItemStatus(
this.accountId,
itemChange.item.id
)
.pipe(
mergeMap(() => getItemsAndCache()),
catchError(() => lastItems$.pipe(first()),
tap({ // >>>>>>>> tap at right place to access itemChange
next: itemChange => {
const itemStatus = itemChange.item.isItemChanged ? 'changed' : 'unchanged';
this.clicked = false;
this.alerts.success({
message: `Item is now ${itemStatus}.`
});
}
})
))
),
)
OR
不确定下面的答案
但根据您的代码,您可以将itemChange
更改为next
,并且您应该能够访问它(但如前所述,不确定(
而不是
const itemStatus = itemChange.item.isItemChanged ? 'changed' : 'unchanged';
像一样使用它
const itemStatus = next.item.isItemChanged ? 'changed' : 'unchanged';
通过将CCD_ 12保持在相同的位置。