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

Thomas Lee
la source
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';
Sanjeet Kumar
la source
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.

Pau
la source
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.

Marius Mielcarek
la source
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

Thomas Lee
la source
30

Vous utilisez RxJS 6. Remplacez simplement

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

par

import { Observable, of } from 'rxjs';
Veben
la source
21

Essaye ça:

npm install rxjs-compat --save
Yogesh Kumar
la source
1
en fait, cela a résolu le problème dans angular 8 ionic 5
PhpCoder
Confirmé! A travaillé dans Angular 9 avec Ionic 5.
Jaseem Abbas il y a
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
Jackie
la source
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

Matthew Smith
la source
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
Blasanka
la source
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);
  }
}
Mark Mishaev
la source
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",
}
Manoj Gupta
la source
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

Sebbab
la source
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
rtrigo
la source
-3

utilisation return Observable.of(HEROES);

Dominik Ernst
la source
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