Angolare - "non ha membri esportati 'Osservabile'"


156

codice

informazioni sull'errore

Codice dattiloscritto:

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);
  }

}

informazioni sull'errore:

errore TS2307: impossibile trovare il modulo 'rxjs-compat / Observable'. node_modules / rxjs / observable / of.d.ts (1,15): errore TS2307: impossibile trovare il modulo 'rxjs-compat / osservable / of'. src / app / hero.service.ts (2,10): errore TS2305: il modulo '"F: / angular-tour-of-heroes / node_modules / rxjs / Observable"' non ha membri esportati 'Osservabile'. src / app / hero.service.ts (15,12): errore TS2304: impossibile trovare il nome 'of'.

package.json file con versione angolare:

versione


3
Il framework che stai usando si chiama Angular. AngularJS è un framework diverso.
JB Nizet,

9
Sembra che tu stia utilizzando RxJS 6. Le importazioni devono essere modificate quando si utilizza quella versione (vedere le note di rilascio). Se non stai usando Angular 6, allora dovresti rimanere con RxJS 5.
JB Nizet,

grazie Sto usando Angular6.0 ~
Thomas Lee il

5
Ecco quindi la documentazione pertinente: next.angular.io/guide/rx-library . Nota che le importazioni non sono quelle che stai utilizzando.
JB Nizet,

Risposte:


205

Questo potrebbe essere utile in Angular 6 per maggiori informazioni consultare questo documento

  1. rxjs: metodi di creazione, tipi, scheduler e utilità
import {Osservabile, Oggetto, asapScheduler, pipe, di, da, intervallo, unisci, daEvento} da 'rxjs';
  1. rxjs / operatori : tutti gli operatori pipable:
importare {mappa, filtrare, scansionare} da "rxjs / operatori";
  1. rxjs / webSocket: l'implementazione del soggetto del socket web
importare {webSocket} da 'rxjs / webSocket';
  1. rxjs / ajax : l'implementazione di Rx ajax
importare {ajax} da 'rxjs / ajax';
  1. rxjs / testing : le utility di test
importare {TestScheduler} da 'rxjs / testing';

4
come puoi "risolverlo?" di prima mano? la ricerca di SO funziona, ma se la libreria fosse meno utilizzata.
cjb110,

12
npm install rxjs-compat --save
EvAlex il

115

Apparentemente (come indicato nel registro degli errori), dopo l'aggiornamento a Angular 6.0.0 rxjs-compat manca.

Esegui npm install rxjs-compat --saveper installare. Dovrebbe risolverlo.


3
anche io sto affrontando lo stesso problema, ma cosa succede se non voglio usare un pacchetto di compatibilità con le versioni precedenti?
Prasanna Sasne,

2
E se non volessimo utilizzare rxjs-compat?
Enrico,

2
Questa dovrebbe essere la risposta corretta. Non è la risposta giusta per andare avanti ... ma è sicuramente la risposta "adesso".
William Terrill,

96

Metti solo:

import { Observable} from 'rxjs';

Proprio così. Niente di più o di meno.


6
L'uso di "rxjs" invece di "rxjs / Observable" ha risolto il mio problema. Penso che il proprietario della domanda dovrebbe accettare la tua risposta.
Levent Divilioglu,

1
Funzionerà sicuramente. Ma supporta anche Tree Shaking?
Sandy,

56

Ho sostituito il codice originale con import { Observable, of } from 'rxjs'e il problema è stato risolto.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


30

Stai usando RxJS 6. Basta sostituire

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

di

import { Observable, of } from 'rxjs';


10

Ciò che mi ha aiutato è:

  1. Sbarazzati di tutti i vecchi percorsi di importazione e sostituiscili con nuovi come questo:

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

  2. Elimina node_modulescartella

  3. npm cache verify
  4. npm install

6

Ho avuto un problema simile. Il back-revving RXJS da 6.x all'ultima versione 5.x l'ha risolto per Angular 5.2.x.

Apri package.json.

Cambia "rxjs": "^6.0.0",in"rxjs": "^5.5.10",

correre npm update


Penso che questa sia la cosa migliore da fare poiché rxjs 6 sarà supportato solo da Angular 6.
David D.

4

Rimuovi /Observableda'rxjs/Observable';

Se poi ti Cannot find module 'rxjs-compat/Observable'metti sotto la riga al terminale thr e premi invio.

npm install --save rxjs-compat

2

La mia risoluzione è stata l'aggiunta della seguente importazione: import { of } from 'rxjs/observable/of';

Quindi il codice generale di hero.service.ts dopo la modifica è:

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);
  }
}

Bene, questo è stato l'errore con cui ha iniziato, l'esportazione non è lì.
Zlatko,

2

Il angular-splitcomponente non è supportato in Angular 6, quindi per renderlo compatibile con l'installazione di Angular 6 a seguito della dipendenza nell'applicazione

Per farlo funzionare fino a quando non viene aggiornato, utilizzare:

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

0

Nel mio caso questo errore si stava verificando perché nel mio computer avevo una versione precedente di ng cli.

Il problema è stato risolto dopo l'esecuzione:

ng update

ng update @angular/cli


0

Aggiorna la versione angular-in-memory-web-api . La versione predefinita di angular-in-memory-web-api installata durante il tutorial angular-tour-of-heroes era 0.4. Nel mio caso ha funzionato come un incantesimo. (Uso di Angular 7 con RxJS 6)

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

-3

uso return Observable.of(HEROES);


1
Sebbene questa risposta sia probabilmente corretta e utile, è preferibile includere una spiegazione insieme per spiegare come aiuta a risolvere il problema. Ciò diventa particolarmente utile in futuro, se c'è un cambiamento (possibilmente non correlato) che ne fa smettere di funzionare e gli utenti devono capire come funzionava una volta.
Erty Seidohl,

Se leggi attentamente la domanda, vedrai le menzioni di Angular 6 e rxjs 6 , non 5. Questo problema è specifico per rxjs v6 +, mentre la soluzione che hai pubblicato è correlata a rxjs (e Angular) v5.
Zlatko,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.