web-dev-qa-db-fra.com

rxjs/Subscription n'a pas de membre 'Subscription' exporté

J'ai mis à jour mon projet angular et toutes mes dépendances vers la dernière version. Sans trop de problèmes, j'ai résolu la plupart des problèmes de dépendance, mais je suis toujours bloqué sur RxJs. Voici mon 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"

Je ne fais que importer des modules à partir de RxJs: 

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

Ils donnent tous les deux la même erreur:

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

C'est exactement la même chose pour fromPromise. Voici le message d'erreur que je reçois de Subscribtion.d.ts (je n'ai modifié le code d'aucune façon)

 enter image description here

METTRE À JOUR:

Les réponses ci-dessous ont résolu le problème avec Subscription mais fromPromise donne toujours le même problème même s'il a été exporté correctement: 

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

 enter image description here

17
Øystein Seel

Il y a beaucoup de changements radicaux avec RxJS 6. Par exemple, les méthodes prototypes comme 

myObservable.map(data => data * 2)

ne fonctionnera plus et doit être remplacé par 

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

Tous les détails peuvent être trouvés ici: https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/migration.md


Tant que vous n’aurez pas corrigé toutes les modifications importantes, vous pourrez rétablir l’ancien code avec rxjs-compat ( https://github.com/ReactiveX/rxjs/tree/master/compat ).

Ce paquet est nécessaire pour obtenir une compatibilité ascendante avec RxJS antérieure à la version 6. Il contient les importations pour ajouter des opérateurs à Observable.prototype et méthodes de création à Observable.

Tapez ceci pour l'installer:

npm install -s rxjs-compat
27
Alexandre Annic

Vous pouvez le réparer avec ceci:

importer { de } de 'rxjs'; 

Et, au lieu de: Return Observable.fromPromise (nouvelle promesse ((résoudre, rejeter)) => {

Maintenant, fais juste: 

return de (nouvelle promesse ((résoudre, rejeter)) => {

Il en va de même pour Observable.of

1
IvanS

afaik Angular 6 et rxjs 6 ne sont pas encore compatibles, pour la compatibilité ils l'ont créée https://www.npmjs.com/package/rxjs-compat vous devez installer

[UPDATE] FromPromise est maintenant "from" . Voir ici: https://github.com/ReactiveX/rxjs/issues/3525

0
Kevin ALBRECHT