【问题标题】:rxjs/Subscription has no exported member 'Subscription'rxjs/Subscription 没有导出的成员“订阅”
【发布时间】:2018-10-15 00:09:16
【问题描述】:

我将我的 Angular 项目和所有依赖项更新到了最新版本。没有太多麻烦,我解决了大部分依赖问题,但我仍然坚持使用 RxJS。这是我的 package.json:

  "dependencies": {
    "@angular-devkit/build-angular": "^0.6.0",
    "@angular/animations": "^6.0.0",
    "@angular/common": "^6.0.0",
    "@angular/compiler": "^6.0.0",
    "@angular/core": "^6.0.0",
    "@angular/forms": "^6.0.0",
    "@angular/http": "^6.0.0",
    "@angular/platform-browser": "^6.0.0",
    "@angular/platform-browser-dynamic": "^6.0.0",
    "@angular/router": "^6.0.0",
    "angular-bootstrap-md": "^6.0.1",
    "core-js": "^2.5.5",
    "font-awesome": "^4.7.0",
    "rxjs": "^6.1.0",
    "zone.js": "^0.8.26"
  },
  "devDependencies": {
    "@angular/cli": "~6.0.0",
    "@angular/compiler-cli": "^6.0.0",
    "@angular/language-service": "6.0.0",
    "@types/jasmine": "~2.8.3",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~6.0.60",
    "codelyzer": "^4.0.1",
    "electron": "^1.8.3",
    "jasmine-core": "~2.8.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~2.0.2",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "^1.4.2",
    "karma-jasmine": "~1.1.2",
    "karma-jasmine-html-reporter": "^1.0.0",
    "protractor": "~5.3.1",
    "ts-node": "~6.0.2",
    "tslint": "~5.10.0",
    "typescript": "~2.7.2"

我只从 RxJS 导入两个模块:

import { fromPromise } from 'rxjs/observable/fromPromise';
import { Subscription } from 'rxjs/Subscription';

他们都给出了同样的错误:

    [ts] Module '"***/node_modules/rxjs/Subscription"' has no exported
 member 'Subscription'.

fromPromise 完全一样。这是我从Subscribtion.d.ts 收到的错误消息(我没有以任何方式修改代码)

更新:

下面的答案解决了 Subscription 的问题,但 fromPromise 即使导出正确,仍然会出现同样的问题:

export * from 'rxjs-compat/observable/fromPromise';

【问题讨论】:

  • 在您的代码中,您从rxjs 导入,但在图像中您有rxjs-compat
  • 新版本的 RxJs 有不同的导入方式和 piepeable 操作符。您需要安装 rxjs-compat 以实现向后兼容,然后逐步升级到新版本。 Here is the migration guide
  • @AdrianFâciu,链接失效了
  • 帮我解决了:import { Subscription } from 'rxjs'

标签: javascript angular npm rxjs rxjs-compat


【解决方案1】:

RxJS 6 有很多重大变化。例如,原型方法为

myObservable.map(data => data * 2)

不再起作用,必须替换为

myObservable.pipe(map(data => data * 2))

所有细节都可以在这里找到:https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/migration.md


在您修复所有重大更改之前,您可以使用 rxjs-compat (https://github.com/ReactiveX/rxjs/tree/master/compat) 使旧代码再次工作。

这个包是向后兼容 RxJS 所必需的 版本 6 之前的版本。它包含要添加运算符的导入 Observable.prototypeObservable 的创建方法。

输入这个来安装它:

npm install -s rxjs-compat
【解决方案2】:

我希望您的问题可以使用以下语句解决 import Subscription from 'rxjs'

【讨论】:

    【解决方案3】:

    你可以用这个来修复它:

    从'rxjs'导入{来自};

    并且,而不是: return Observable.fromPromise(new Promise((resolve, reject) => {

    现在就做:

    return from(new Promise((resolve, reject) => {

    同样适用于 Observable.of

    【讨论】:

      【解决方案4】:

      afaik Angular 6 和 rxjs 6 尚不兼容,因为它们创建的兼容性https://www.npmjs.com/package/rxjs-compat 你必须安装

      [更新] fromPromise 现在是“来自”。 看这里:https://github.com/ReactiveX/rxjs/issues/3525

      【讨论】:

      • Angular 6 和 RxJs 6 非常兼容。需要更改导入并使用可管道操作符。
      • 我在 github/stackoverflow 上看到了很多问题(比如这里),但主要是 beta/rc 版本,我的错
      • 如果这个答案不再相关/不正确,您可以删除它(取决于您),特别是因为 OP 已经注意到他们已经在使用 rxjs-compat
      猜你喜欢
      • 2019-03-01
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 2018-11-07
      • 2018-10-20
      • 2019-11-04
      • 2018-05-22
      相关资源
      最近更新 更多