在typescript中导入.of()for Observable

alv*_*peo 17 typescript rxjs5 angular

我正在使用这个伟大的回购用于我的角度2测试项目(TypeScript) - https://github.com/qdouble/angular-webpack2-starter.我需要使用Observable.of(..).当我尝试导入它时:

import { Observable } from "rxjs/Observable";
import { of } from 'rxjs/observable/of';
Run Code Online (Sandbox Code Playgroud)

我明白了:

类型'typeof Observable'上不存在属性'of'.

我也尝试了以下方式:

import { Observable } from "rxjs/Observable";
import { of } from 'rxjs/add/observable/of'; // notice 'add'
Run Code Online (Sandbox Code Playgroud)

我有:

node_modules/rxjs/add/observable/of"'没有''的导出成员'.

那么,如何为Observable导入这个Of()静态方法???

Noé*_*aün 23

您不必导入{of}'rxjs/add/observable/of'.你可以直接使用

import { Observable } from "rxjs/Observable";
import "rxjs/add/observable/of";
Run Code Online (Sandbox Code Playgroud)

或者您可以Observable从捆绑所有运算符的"rxjs/Rx" 导入. 不好的做法

import { Observable } from "rxjs/Rx";
Run Code Online (Sandbox Code Playgroud)

更新2018-01-26:RxJS v5.5 +可管理运算符

来自https://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md

从版本5.5开始,我们已经发布了"可管道运算符",可以在rxjs /运算符中访问(注意复数"运算符").与rxjs/add/operator/*中的"patch"运算符相比,这些只是一种更好的方法来引入所需的运算符.

既然"修补"进口将被弃用,那么使用严格的进口会更好.

import { of as observableOf } from 'rxjs/observable/of'
Run Code Online (Sandbox Code Playgroud)

并使用它

const myObs$: Observable<number> = observableOf(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)


Mob*_*ent 15

RxJS 6

RxJS 6开始,由于更直观的API表面,导入大大简化并且现在减少了混乱:

  1. 创建方法如of直接导入'rxjs':

    import { of } from 'rxjs';

  2. 所有可管道运营商都是从'rxjs/operators',例如:

    import { tap, map } from 'rxjs/operators';


移民:

如果您直接从RxJS 5更新,您甚至可以使用RxJS的TSLint规则,它将自动修复您的导入到更新的简化API:

  1. npm i -g rxjs-tslint
  2. rxjs-5-to-6-migrate -p [path/to/tsconfig.json]