集中导入 rxjs 可出租运算符

Centrally importing rxjs lettable operators

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

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

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

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

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

对于旧运算符,导入它们包括 monkey-patching Observable class 和新方法。您依赖于将它们导入一个文件并在单独的文件中使用它们的不良做法。这是一种不好的做法,因为如果 distinctUntilChanged 运算符只在一个文件中使用,而你决定不再使用它,或者只是删除文件,中心位置仍然导入它,但没有任何意义,使你的包更大不必要的。

现在运算符是独立的 top-level 函数。你只需要(就像你应该对旧的那样)在你使用它们的地方导入它们。这是 TypeScript 需要的,以便它知道您正在使用哪个函数(几个库的几个 top-level 函数可以命名为 map() 或 of() 或 filter()),并且它也是打包程序所必需的知道要包含在捆绑包中的内容。

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

简而言之,习惯就好:class你在一个模块(即文件)中使用的es、函数、变量和常量必须由该模块导入。

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