Angular库开发中Observable无withLatestFrom属性的错误求助
解决RxJS
withLatestFrom 不存在于Observable类型的错误 这个问题我之前也碰到过,本质是RxJS 5.x的模块化设计导致的,不是版本不兼容或者代码逻辑问题,咱们一步步解决:
问题原因
RxJS从5.x版本开始,为了优化打包体积,默认不会把所有操作符都挂载到Observable的原型链上。像withLatestFrom这类实例操作符,必须显式导入后才能在Observable对象上调用,否则TypeScript就会报"属性不存在"的类型错误。
具体解决方案
针对你的RxJS 5.4.3版本,有两种可行的解决方式:
方式一:直接导入原型扩展(最适配你的当前版本)
在你的Effects文件顶部,添加对withLatestFrom操作符的导入语句:
// 放在文件开头的import区域 import 'rxjs/add/operator/withLatestFrom';
这个导入语句会把withLatestFrom方法添加到Observable的原型上,之后你的代码就能正常调用.withLatestFrom()了。
方式二:使用pipeable操作符(RxJS 5.5+推荐,可升级后使用)
如果后续你把RxJS升级到5.5及以上版本,更推荐使用pipeable操作符的写法(这种写法也更符合RxJS 6+的语法习惯):
// 先导入pipe和withLatestFrom import { pipe } from 'rxjs/util/pipe'; import { withLatestFrom } from 'rxjs/operators'; // 修改Effects代码为pipe链式调用 @Effect() addProduct$ = this.actions$ .ofType(spsCart.CART_ADD_PRODUCT) .map(toPayload) .pipe( withLatestFrom(this.store$) ) .switchMap(([payload, storeState]) => { // 你的业务逻辑代码 });
版本兼容性验证
检查了你的package.json配置,@ngrx/effects@4.1.1和rxjs@5.4.3、Angular 5.x是完全兼容的,所以版本搭配没有问题,不用调整依赖版本。
内容的提问来源于stack exchange,提问作者CuriousAboutThings
相关产品推荐
相关产品推荐

