2017-04-20 41 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