2017-04-20 38 views
4

由于某些原因,我无法在我的任何观察对象上使用takeUntil方法。在我的所有观察对象上出现错误'takeUntil不是函数'

当我编码时,我的IDE(Visual Studio Code)显示它是一个有效的方法,它编译得很好(来自打字稿),但是当我运行它时,我的任何可观察对象都得到takeUntil is not a function

我正在使用rxjs版本5.3.0。

我可以使它在各种各样的方式发生,但是这可能是最简单的:

let subject:BehaviorSubject<any> = new BehaviorSubject<any>({}); 
let unsubscribe: Subject<void> = new Subject<void>(); 
subject.takeUntil(unsubscribe); 

老实说,我无法找到任何方式来实例化什么地方takeUntil不会导致该错误,但IDE从不抱怨,打字稿总是编译得很好 - 错误总是出现在浏览器中。

回答

17

你可能需要导入takeUntil操作:

import 'rxjs/add/operator/takeUntil';

+0

这似乎解决问题。您如何知道默认情况下哪些运营商可用,以及您需要导入哪些运营商?例如,'subscribe'总是在那里,我不需要导入它。我想我只是尝试,如果它不起作用,我输入它?为什么构建过程不能捕捉到操作员缺失的事实? – WillyC

+0

我不确定除了假设你将不得不导入所有操作员之外,还有一个很好的方法可以知道。您的IDE可能具有多个包含扩展(添加)功能的类型定义,因此您可以看到扩展定义。 – JusMalcolm

+0

您还可以通过导入rxjs/Rx而不是rxjs来导入所有运算符 – JusMalcolm