类型错误:observable.of不是函数 - angular-cli@1.6.3 - rxjs@5.5.x - angular5

时间:2018-01-13 05:34:24

标签: typescript rxjs5 angular5

升级到angular-cli@1.6.3并将所有RxJS导入,方法和运算符转换为新的> 5.5表单后,我在运行时收到类型错误,指出Observable.of不是一个功能。所有定义为Observable扩展名成员的方法都会发生同样的错误,例如Observable.fromEvent

另一方面,定义为独立函数的方法(如Observable.combineLatest)正常运行,尽管编译器警告它们不存在于Observable类型上。

为了澄清,我对任何操作员都没有问题(将它们转换为管道形式后)。只有方法。

我找到的解决方案是替换:

import { of } from 'rxjs/observable/of';
import { fromEvent } from 'rxjs/observable/fromEvent';
...
const x = Observable.of(true, false);
const y = Observable.fromEvent(target, 'click');

import { ArrayObservable } from 'rxjs/observable/ArrayObservable';
import { FromEventObservable } from 'rxjs/observable/FromEventObservable';
...
const x = ArrayObservable.of(true, false);
const y = FromEventObservable.create(target, 'click');

但我认为这应该是更好的方式。我是对的吗?

注意:

  1. 我被迫使用"提前编译"构建和提供应用程序的功能,因为否则角度注入器将失败(但这是另一个问题)。
  2. 我知道this other similar question的存在。但是那个适用于RxJS的版本小于< 5.5根据答案。
  3. ng --version给出:

    Angular CLI:1.6.3, 节点:8.9.1, 操作系统:win32 x64, Angular:5.1.3,

    @ angular / cli:1.6.3, @ angular-devkit / build-optimizer:0.0.36, @ angular-devkit / core:0.0.22, @ angular-devkit / schematics:0.0.42, @ ngtools / json-schema:1.1.0, @ ngtools / webpack:1.9.3, @ schematics / angular:0.1.11, @ schematics / schematics:0.0.11, 打字稿:2.5.3, webpack:3.10.0,

1 个答案:

答案 0 :(得分:5)

当使用lettable(现在称为可管理的)运算符和工厂函数时,这些只是函数,而不是Observables的方法。所以它应该只是

import { of } from 'rxjs/observable/of';
import { fromEvent } from 'rxjs/observable/fromEvent';

const x = of(true, false);
const y = fromEvent(target, 'click');

了解documentation如何使用range工厂函数。