0

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

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

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

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

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

4

1 回答 1

2

对于旧的运算符,导入它们包括用新方法对 Observable 类进行猴子修补。您依赖于将它们导入一个文件并在单独的文件中使用它们的不良做法。这是一种不好的做法,因为假设 distinctUntilChanged 运算符仅在一个文件中使用,而您决定不再使用它,或者干脆删除文件,中心位置仍然会导入它,这会导致您的包更大比必要的。

现在运算符是独立的顶级函数。您只需要(就像您应该对旧的那样)将它们导入到您使用它们的位置。这是 TypeScript 需要的,以便它知道您正在使用哪个函数(几个库的几个顶级函数可以命名为 map() 或 of() 或 filter()),并且捆绑器还需要知道什么包含在捆绑包中。

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

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

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

于 2018-03-06T07:51:16.717 回答