集中导入rxjs可租用运算符

时间:2018-03-06 07:40:48

标签: rxjs rxjs-lettable-operators

我习惯使用旧的rxjs语法,其中所有方法调用都是链接的,并且我可以集中导入所有运算符。

在一个新的应用程序中,我现在开始在Obsrvable上使用管道方法使用“可调运算符”,但我没有成功地集中导入这些运算符。

所以,在某个组件中我使用map和mergeMap,并像这样导入它们:

import { map } from 'rxjs/operators/map';
import { mergeMap } from 'rxjs/operators/mergeMap';

如果我从我的组件文件中删除这些导入并将它们放在我的main.ts中,例如,编译失败,因为找不到那些方法...这在lettable运算符之前很简单。我错过了什么?

1 个答案:

答案 0 :(得分:2)

使用旧的运算符,导入它们包括使用新方法对Observable类进行猴子修补。您依赖于在一个文件中导入它们并在单独的文件中使用它们的错误做法。这是一个不好的做法,因为如果,比方说,uniUntilChanged操作符只在一个文件中使用,并且您决定不再使用它,或者只是删除文件,中心位置仍然导入它,什么也不做,使您的包更大不必要的。

现在运营商是独立的顶级功能。您只需要(就像您应该使用旧的那样)在您使用它们的地方导入它们。这是TypeScript所需要的,因此它知道你正在使用哪个函数(几个库的几个顶级函数可以命名为map()或()或filter()),捆绑器也需要知道什么包括在捆绑包中。

有关详细说明,请参阅https://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md#why

简而言之,只需习惯它:您在一个模块(即文件)中使用的类,函数,变量和常量必须由该模块导入。

体面的IDE会自动添加必要的导入。如果您手动输入进口产品,则需要使用更好的工具。