RxJS中tap()为何会破坏下游类型断言?
RxJS操作符导致下游类型断言丢失问题
最近发现一个问题,不确定是否与版本有关。当在pipe中较早使用tap()操作符时,下游会丢失类型断言。由于tap是处理副作用的操作符,按逻辑它不该像map那样影响下游的类型断言,这导致我无法把副作用逻辑放到map之外处理。
示例代码
1. tap()导致map中类型丢失
$query$ = this.bookService.fetch().valueChanges.pipe( tap((r) => console.log(r.loading) /** 此处r具有正确的Observable类型断言 */), map(r => { // 这里r变为泛型类型A,类型断言丢失 }) )
2. takeUntilDestroyed()后tap中类型丢失
.pipe( takeUntilDestroyed(this.destroyRef), tap((r) => console.log(r.data.submissionBatches)), )
补充说明
此处使用的Observable来自angular-apollo的GraphQL查询响应,例如Observable<GetBookQuery>。
我想确认自己是否操作有误,以及为何会出现类型断言丢失的情况。需要说明的是,这并非StackOverflow问题《Why Return Type Is Changing in tap() operator Rxjs?》的重复问题,我的实现完全符合RxJS文档规范——文档中明确说明tap的作用是:
用于在不修改通知内容的前提下,通过通知影响外部状态
使用版本
- Rxjs ~7.8.1
- Angular ~16.1
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

