从'导入;rxjs';与';rxjs compat';作为附加依赖项呈现不会产生兼容的可观察项

从'导入;rxjs';与';rxjs compat';作为附加依赖项呈现不会产生兼容的可观察项,rxjs,rxjs-compat,Rxjs,Rxjs Compat,rxjs 5-6迁移说明的措辞以及类似的博客文章暗示,只要将“rxjs compat”与“rxjs”一起作为我们项目的依赖项,那么从“rxjs”导入的可观察对象、主题等将与遗留操作符兼容。例如,(3,4,5)concatMap(num=>{/*…*/})的可观测值。然而,我们的情况似乎并非如此。如果我们直接从“rxjs compat”导入,事情确实会像预期的那样工作,这似乎不是预期的迁移路径,而且“rxjs”的类型脚本声明更完整,而且在同一个文件中同时导入“rxjs”和“rxjs compat”

rxjs 5-6迁移说明的措辞以及类似的博客文章暗示,只要将“rxjs compat”与“rxjs”一起作为我们项目的依赖项,那么从“rxjs”导入的可观察对象、主题等将与遗留操作符兼容。例如,(3,4,5)concatMap(num=>{/*…*/})的可观测值。然而,我们的情况似乎并非如此。如果我们直接从“rxjs compat”导入,事情确实会像预期的那样工作,这似乎不是预期的迁移路径,而且“rxjs”的类型脚本声明更完整,而且在同一个文件中同时导入“rxjs”和“rxjs compat”会有点烦人,将来需要清理。是否还有其他步骤,或者需要从“rxjs compat”导入?

只需重构代码,而不使用兼容层

Observable.of(3, 4, 5).concatMap(num => {/*...*/})
变成

of(3, 4, 5).pipe(concatMap(num => {/*...*/}))

您最好先进行重构。

只需重构代码,不要使用兼容层

Observable.of(3, 4, 5).concatMap(num => {/*...*/})
变成

of(3, 4, 5).pipe(concatMap(num => {/*...*/}))

提前进行重构会更好。

不幸的是,代码库相当大,rxjs compat的吸引力在于它可以实现渐进式迁移,而不是要求我们立即更改所有内容。当我们从Angular 5升级到Angular 6时,我也有同样的想法。我本来打算使用compat层,但我的开发主管告诉我不要这样做。我很高兴我们现在这样做了。编译器告诉我所有需要修复的东西都在哪里,并且在半天内就完成了。我认为这一切都是值得的。不幸的是,代码库相当大,rxjs compat的吸引力在于它将支持渐进式迁移,而不是要求我们立即改变一切。当我们从Angular 5升级到Angular 6时,我也有同样的想法。我本来打算使用compat层,但我的开发主管告诉我不要这样做。我很高兴我们现在这样做了。编译器告诉我所有需要修复的东西都在哪里,并且在半天内就完成了。我认为这是值得的。