Angular RxJS pipe报错:unknown[]无法分配给OperatorFunction类型排查
报错触发原因
- 最核心的高频诱因是
map操作符导入路径错误:大概率是从rxjs直接导入了用于创建Observable的map方法,而非从rxjs/operators导入用于pipe管道的操作符map,非法的操作符传入pipe后触发TS类型校验不匹配。 - 若导入路径正确,则是TS类型推断断层:未给pipe操作符的入参
res显式声明类型,导致TS将其推断为unknown类型,后续传入要求AlertModel[]类型的setDataForFilters方法时触发二次类型报错。 - 冗余的
map((res) => res)无实际业务意义,也放大了类型推断失效的概率。
修复方案
- 首先修正
map、tap操作符的导入路径:
// 正确导入路径 import { map, tap } from 'rxjs/operators';
- 你可以选择两种方案修改component代码:
- 删去冗余的空转map,同时给tap的入参显式声明类型:
private initialize(): void { this.alertsChanged$ = this.alertsService.getAlerts().pipe( tap((res: AlertModel[]) => { this.setDataForFilters(res); }), ); }- 若需要保留map,给map的入参显式声明类型即可:
private initialize(): void { this.alertsChanged$ = this.alertsService.getAlerts().pipe( map((res: AlertModel[]) => res), tap((res: AlertModel[]) => { this.setDataForFilters(res); }), ); }
两种方案都可以完全解决上述两类TS类型报错。
内容的提问来源于stack exchange,提问作者Sampath
相关产品推荐
相关产品推荐

