无法在 RxJs 6 和 Angular 6 中使用 Observable.of

64
 import { Observable, of } from "rxjs";

// And if I try to return like this
  return Observable.of(this.purposes);

我遇到一个错误,提示“类型'typeof Observable'上不存在属性'of'”


22
在v6版本中,只需使用return of(this.purposes) - cartant
3
这个在哪里有记录?通常的用法是“您可以从一个位置'rxjs/operators'导入所需的任何运算符”,这与创建显然不同,但是静态方法是否被替换还不清楚。这种知识分散在各个地方,就像我正在寻找Tox Uthat一样,浪费了时间。 - Joe
3个回答

120

看起来 cartant 的评论是正确的,RxJS 升级指南 没有具体涵盖那个方法,但是它说过 "操作 Observables 的类已经被函数所取代"

这似乎意味着所有或大部分那些类方法,如 .of,.throw 等都已被一个函数所代替

因此,不再使用

import { Observable, of } from "rxjs";
Observable.of(this.purposes);

import { of } from "rxjs";
of(this.purposes);

7
从 'rxjs/observable/of' 导入 { of }。 - sabithpocker
1
reduce() 怎么样? - Marinos An
reduce()已经被移动到操作符中,因此您可以使用import {reduce} from 'rxjs/operators';导入它。 - tim545
6
这是一个非常糟糕的变化。这些方法应该像以前一样成为类的静态方法。现在更容易出现名称冲突。 - Trevor de Koekkoek
您可以在以下链接中了解变化的概述:https://www.academind.com/learn/javascript/rxjs-6-what-changed/ - Inês Gomes
现在的“of”已经被弃用了,文档建议使用“scheduled”代替。 - Wildhammer

4

rxjs 6

import { PreloadingStrategy, Route } from '@angular/router';
import { Observable, of } from 'rxjs';

export class SelectivePreloadingStrategy implements PreloadingStrategy {
    preload(route: Route, load: Function): Observable<any> {
       return route.data && route.data.preload === false ? of(null) : load();
    }

 }

0
为了避免 RxJS 的黑名单检测,请以如下方式导入它们:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接