Angulaire - "n'a aucun membre exporté" Observable ""


156

code

info d'erreur

Code dactylographié:

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { of } from 'rxjs/observable/of';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';

@Injectable({
  providedIn: 'root'
})
export class HeroService {

  constructor() { }

  getHeroes(): Observable<Hero[]> {
    return of(HEROES);
  }

}

info d'erreur:

erreur TS2307: Impossible de trouver le module 'rxjs-compat / Observable'. node_modules / rxjs / observable / of.d.ts (1,15): erreur TS2307: Impossible de trouver le module 'rxjs-compat / observable / of'. src / app / hero.service.ts (2,10): erreur TS2305: Le module '"F: / angular-tour-of-heroes / node_modules / rxjs / Observable"' n'a pas de membre exporté 'Observable'. src / app / hero.service.ts (15,12): erreur TS2304: Impossible de trouver le nom «de».

package.json fichier avec la version angulaire:

version


3
Le framework que vous utilisez est nommé Angular. AngularJS est un framework différent.
JB Nizet

9
Il semble que vous utilisez RxJS 6. Les importations doivent être modifiées lors de l'utilisation de cette version (voir les notes de publication). Si vous n'utilisez pas Angular 6, vous devez vous en tenir à RxJS 5.
JB Nizet

thx.J'utilise Angular6.0 ~
Thomas Lee

5
Voici donc la documentation pertinente: next.angular.io/guide/rx-library . Notez que les importations ne sont pas celles que vous utilisez.
JB Nizet

Réponses:


205

Cela peut être utile dans Angular 6 pour plus d'informations, reportez-vous à ce document

  1. rxjs: méthodes de création, types, ordonnanceurs et utilitaires
import {Observable, Subject, asapScheduler, pipe, of, from, interval, merge, fromEvent} from 'rxjs';
  1. rxjs / operators : Tous les opérateurs canalisables:
importer {map, filter, scan} depuis 'rxjs / operators';
  1. rxjs / webSocket: l' implémentation du sujet du socket Web
import {webSocket} depuis 'rxjs / webSocket';
  1. rxjs / ajax : l'implémentation de Rx ajax
import {ajax} de 'rxjs / ajax';
  1. rxjs / testing : les utilitaires de test
import {TestScheduler} depuis 'rxjs / testing';

4
comment pouvez-vous "résoudre ce problème?" de première main? la recherche de SO fonctionne, mais si la bibliothèque était moins bien utilisée.
cjb110

12
npm install rxjs-compat --save
EvAlex

115

Apparemment (comme vous le pointez dans le journal des erreurs), après la mise à jour vers Angular 6.0.0, rxjs-compat est manquant.

Exécutez npm install rxjs-compat --savepour installer. Devrait le réparer.


3
Je suis également confronté au même problème, mais que faire si je ne veux pas utiliser le package de compatibilité descendante?
Prasanna Sasne

2
Et si nous ne voulons pas utiliser rxjs-compat?
Enrico

2
Cela devrait être la bonne réponse. Ce n'est pas la bonne réponse pour aller de l'avant ... mais c'est certainement la réponse «dès maintenant».
William Terrill

96

Mettez simplement:

import { Observable} from 'rxjs';

Juste comme ça. Rien de plus ou de moins.


6
Utiliser «rxjs» au lieu de «rxjs / Observable» vient de résoudre mon problème. Je pense que le propriétaire de la question devrait accepter votre réponse.
Levent Divilioglu

1
Cela fonctionnera certainement. Mais prend-il également en charge Tree Shaking?
Sandy

56

J'ai remplacé le code d'origine par import { Observable, of } from 'rxjs', et le problème est résolu.

entrez la description de l'image ici

entrez la description de l'image ici


30

Vous utilisez RxJS 6. Remplacez simplement

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

par

import { Observable, of } from 'rxjs';


10

Ce qui m'a aidé, c'est:

  1. Débarrassez-vous de tous les anciens chemins d'importation et remplacez-les par de nouveaux comme ceci:

    import { Observable , BehaviorSubject } from 'rxjs';)

  2. Supprimer le node_modulesdossier

  3. npm cache verify
  4. npm install

6

J'ai eu un problème similaire. Le retour en arrière de RXJS de 6.x à la dernière version 5.x l'a corrigé pour Angular 5.2.x.

Ouvrez package.json.

Changer "rxjs": "^6.0.0",pour"rxjs": "^5.5.10",

courir npm update


Je pense que c'est la meilleure chose à faire car rxjs 6 ne sera pris en charge qu'à partir d'Angular 6.
David D.

4

Retirez simplement /Observablede'rxjs/Observable';

Si vous obtenez ensuite Cannot find module 'rxjs-compat/Observable'juste mis en dessous de la ligne au terminal thr et appuyez sur Entrée.

npm install --save rxjs-compat

2

Ma résolution ajoutait l'importation suivante: import { of } from 'rxjs/observable/of';

Ainsi, le code global de hero.service.ts après le changement est:

import { Injectable } from '@angular/core';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';
import { of } from 'rxjs/observable/of';
import {Observable} from 'rxjs/Observable';

@Injectable()
export class HeroService {

  constructor() { }

  getHeroes(): Observable<Hero[]> {
    return of(HEROES);
  }
}

Eh bien, c'était l'erreur avec laquelle il a commencé, l'exportation n'est pas là.
Zlatko

2

Le angular-splitcomposant n'est pas pris en charge dans Angular 6, donc pour le rendre compatible avec Angular 6, installez en suivant la dépendance dans votre application

Pour que cela fonctionne jusqu'à sa mise à jour, utilisez:

"dependencies": {
"angular-split": "1.0.0-rc.3",
"rxjs": "^6.2.2",
    "rxjs-compat": "^6.2.2",
}

0

Dans mon cas, cette erreur se produisait parce que j'avais une ancienne version de ng cli sur mon ordinateur.

Le problème a été résolu après l'exécution:

ng update

ng update @angular/cli


0

Mettez à jour la version angular-in-memory-web-api . La version angular-in-memory-web-api par défaut installée pendant le didacticiel angular-tour-of-heroes était de 0,4. Cela a fonctionné comme un charme dans mon cas. (Utilisation d'Angular 7 avec RxJS 6)

npm i angular-in-memory-web-api@0.8.0

-3

utilisation return Observable.of(HEROES);


1
Bien que cette réponse soit probablement correcte et utile, il est préférable que vous y incluiez des explications pour expliquer comment elle aide à résoudre le problème. Cela devient particulièrement utile à l'avenir, s'il y a un changement (peut-être sans rapport) qui l'empêche de fonctionner et que les utilisateurs doivent comprendre comment cela fonctionnait autrefois.
Erty Seidohl

Si vous lisez attentivement la question, vous verrez des mentions de Angular 6 et rxjs 6 , et non de 5. Ce problème est spécifique à rxjs v6 +, tandis que la solution que vous avez postée est liée à rxjs (et Angular) v5.
Zlatko
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.