使用RxJS获得"不是函数"错误

Rem*_*tec 5 rxjs typescript ngrx angular2-observables angular

看似突然之间我得到了RxJS的错误.

我的项目是Angular,Typescript,我使用RxJS作为NGRX redux的一部分.

我的代码似乎完全正常,只是作为导入:

import { Observable } from 'rxjs/Observable'

然后,我从无处开始得到这样的错误......

Uncaught (in promise): TypeError: this.appStateStore.withLatestFrom is not a function Uncaught (in promise): TypeError: this.appStateStore.take is not a function

我能够withLatestFrom通过添加导入来解决错误,import 'rxjs/add/operator/withLatestFrom';但随后错误移动到抱怨.take.

我猜我在某处导入错误,因为我对RxJS了解你需要导入你需要的位.但是我已经检查了我的源代码控制更改,我看不到会导致这种情况刚刚开始发生的任何更改(例如节点模块版本,导入语句).

我做错了什么?

Lid*_*tan 21

import 'rxjs/add/operator/distinctUntilChanged'; 
import 'rxjs/add/operator/take;
Run Code Online (Sandbox Code Playgroud)

Rxjs v 5.4.1

1)import { Rx } from 'rxjs/Rx;

这会导入整个库.然后,您无需担心加载每个运算符.但你需要附加Rx.我希望树摇动会优化并只挑选所需的功能(需要验证)正如评论中所提到的,树木震动无法帮助.所以这不是优化方式.

public cache = new Rx.BehaviorSubject('');
Run Code Online (Sandbox Code Playgroud)

或者您可以导入单个运算符.

这将优化您的应用程序以仅使用这些文件:

2) import { _______ } from 'rxjs/_________';

此语法通常用于主要对象Rx本身Observable等,

可以使用此语法导入的关键字

 Observable, Observer, BehaviorSubject, Subject, ReplaySubject
Run Code Online (Sandbox Code Playgroud)

3) import 'rxjs/add/observable/__________';

这些通常直接附带Observable.例如

Observable.from()
Observable.of()
Run Code Online (Sandbox Code Playgroud)

可以使用以下语法导入的其他此类关键字:

concat, defer, empty, forkJoin, from, fromPromise, if, interval, merge, of, 
range, throw, timer, using, zip
Run Code Online (Sandbox Code Playgroud)

4) import 'rxjs/add/operator/_________';

这些通常在创建Observable后出现在流中.就像flatMap在这段代码中一样:

Observable.of([1,2,3,4])
          .flatMap(arr => Observable.from(arr));
Run Code Online (Sandbox Code Playgroud)

使用此语法的其他此类关键字:

audit, buffer, catch, combineAll, combineLatest, concat, count, debounce, delay, 
distinct, do, every, expand, filter, finally, find , first, groupBy,
ignoreElements, isEmpty, last, let, map, max, merge, mergeMap, min, pluck, 
publish, race, reduce, repeat, scan, skip, startWith, switch, switchMap, take, 
takeUntil, throttle, timeout, toArray, toPromise, withLatestFrom, zip
Run Code Online (Sandbox Code Playgroud)

FlatMap: flatMap是别名,mergeMap所以我们需要导入mergeMap才能使用flatMap.


/add进口备注:

我们只需要在整个项目中导入一次.因此建议在一个地方进行.如果它们包含在多个文件中,并且其中一个文件被删除,则构建将因错误原因而失败.