【问题标题】:import .of() for Observable in typescript在 typescript 中为 Observable 导入 .of()
【发布时间】:2017-03-27 13:00:13
【问题描述】:

我正在为我的 Angular 2 测试项目 (TypeScript) - https://github.com/qdouble/angular-webpack2-starter 使用这个很棒的存储库。我需要使用 Observable.of(..)。当我尝试导入它时:

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

我明白了:

“typeof Observable”类型上不存在“of”属性。

我也尝试了以下方法:

import { Observable } from "rxjs/Observable";
import { of } from 'rxjs/add/observable/of'; // notice 'add'

我明白了:

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

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

【问题讨论】:

标签: angular typescript rxjs5


【解决方案1】:

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]

【讨论】:

  • 从 'rxjs' 导入 { of };它对我有用。谢谢!!
【解决方案2】:

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

import { Observable } from "rxjs/Observable";
import "rxjs/add/observable/of";

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

import { Observable } from "rxjs/Rx";

2018-01-26 更新:RxJS v5.5+ 可管道操作符

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

从 5.5 版开始,我们发布了“可管道操作符”,可以在 rxjs/operators 中访问(注意复数的“操作符”)。与 rxjs/add/operator/* 中的“补丁”操作符相比,这些方法可以更好地仅引入您需要的操作符。

现在“修补”导入将被弃用,最好使用严格导入。

import { of as observableOf } from 'rxjs/observable/of'

然后像这样使用它

const myObs$: Observable<number> = observableOf(1, 2, 3)

【讨论】:

  • 在引入 pipeable 运算符后,导入“of”或“from”的正确方法是什么?
  • Pipeable 运算符不关心创建函数,例如 of、from、combineLatest 等。您可以像我在上面的示例中那样导入。
  • 用删除线字体变得可爱会使这个“答案”令人困惑
猜你喜欢
  • 2018-12-17
  • 1970-01-01
  • 2021-12-02
  • 2019-04-03
  • 2019-07-09
  • 2016-09-06
  • 2021-06-19
  • 2020-06-02
  • 2019-07-15
相关资源
最近更新 更多