Type Error: observable.of is not a function - angular-cli@1.6.3 - rxjs@5.5.x - angular5

Type Error: observable.of is not a function - angular-cli@1.6.3 - rxjs@5.5.x - 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. 我被迫使用 "Ahead Of Time compilation" 功能来构建和提供应用程序,否则 angular 注入器将失败(但这是另一个问题)。
  2. 我知道 的存在。但是根据答案,那个适用于小于 < 5.5 的 RxJS 版本。
  3. ng --version 给出:

    Angular CLI:1.6.3, 节点:8.9.1, OS: 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, 网络包:3.10.0,

当使用 lettable(现在称为 pipeable)运算符和工厂函数时,这些只是函数,而不是 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 工厂函数。