Angular - «не имеет экспортированного члена« Наблюдаемый »»


156

код

информация об ошибке

Машинописный код:

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

}

информация об ошибке:

ошибка TS2307: не удается найти модуль 'rxjs-compat / Observable'. node_modules / rxjs / observable / of.d.ts (1,15): ошибка TS2307: не удается найти модуль 'rxjs-compat / observable / of'. src / app / hero.service.ts (2,10): ошибка TS2305: Модуль '"F: / angular-tour-of-heroes / node_modules / rxjs / Observable" "не имеет экспортированного члена Observable. src / app / hero.service.ts (15,12): ошибка TS2304: не удается найти имя «of».

package.json файл с угловой версией:

версия


3
Используемая вами среда называется Angular. AngularJS - это другая структура.
Дж. Б. Низет

9
Кажется, вы используете RxJS 6. Импорт должен быть изменен при использовании этой версии (см. Примечания к выпуску). Если вы не используете Angular 6, то вам следует придерживаться RxJS 5.
JB Nizet

thx.Я использую Angular6.0 ~
Томас Ли

5
Вот соответствующая документация: next.angular.io/guide/rx-library . Обратите внимание, что импорт не те, которые вы используете.
Дж. Б. Низет

Ответы:


205

Это может быть полезно в Angular 6 для получения дополнительной информации см. Этот документ

  1. rxjs: методы создания, типы, планировщики и утилиты
import {Observable, Subject, asapScheduler, pipe, of, from, interval, merge, fromEvent} из 'rxjs';
  1. rxjs / operator : все конвейерные операторы:
импортировать {map, filter, scan} из 'rxjs / operator';
  1. rxjs / webSocket: реализация темы веб-сокета
импортировать {webSocket} из 'rxjs / webSocket';
  1. rxjs / ajax : реализация Rx ajax
import {ajax} из 'rxjs / ajax';
  1. rxjs / testing : утилиты тестирования
импортировать {TestScheduler} из 'rxjs / testing';

4
как вы можете это решить? из первых рук? поиск так работает, но если библиотека использовалась менее хорошо.
cjb110

12
npm install rxjs-compat --save
EvAlex

115

Судя по всему (как вы указали в журнале ошибок), после обновления до Angular 6.0.0 отсутствует rxjs-compat.

Запустите npm install rxjs-compat --saveдля установки. Должен это исправить.


3
Я также сталкиваюсь с той же проблемой, но что если я не хочу использовать пакет обратной совместимости?
Прасанна Сасне

2
Что если мы не хотим использовать rxjs-compat?
Энрико

2
Это должен быть правильный ответ. Это не правильный ответ, двигаясь вперед ... но это определенно ответ "прямо сейчас".
Уильям Террилл

96

Просто поставьте:

import { Observable} from 'rxjs';

Просто так. Ничего более или менее.


6
Использование «rxjs» вместо «rxjs / Observable» просто решило мою проблему. Я думаю, что владелец вопроса должен принять ваш ответ.
Левент Дивилиоглу

1
Это определенно будет работать. Но поддерживает ли он также встряхивание деревьев?
Сэнди

56

Я заменил оригинальный код на import { Observable, of } from 'rxjs', и проблема решена.

введите описание изображения здесь

введите описание изображения здесь


31

Вы используете RxJS 6. Просто замените

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

по

import { Observable, of } from 'rxjs';


10

Что помогло мне это:

  1. Избавьтесь от всех старых путей импорта и замените их новыми:

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

  2. Удалить node_modulesпапку

  3. npm cache verify
  4. npm install

6

У меня была похожая проблема. Возвращение RXJS с версии 6.x к последней версии 5.x исправило его для Angular 5.2.x.

Откройте package.json.

Изменить "rxjs": "^6.0.0",на"rxjs": "^5.5.10",

бегать npm update


Я думаю, что это лучше всего сделать, так как rxjs 6 будет поддерживаться только с Angular 6.
Дэвид Д.

4

Просто удалить /Observableиз'rxjs/Observable';

Если вам нужно Cannot find module 'rxjs-compat/Observable'просто поставить строку ниже к терминалу и нажать Enter.

npm install --save rxjs-compat

2

Мое разрешение было добавить следующий импорт: import { of } from 'rxjs/observable/of';

Итак, общий код hero.service.ts после изменения:

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

Ну это была ошибка, с которой он начал, экспорта там нет.
Златко

2

angular-splitКомпонент не поддерживается в угловых 6, так , чтобы сделать его совместимым с угловыми 6 установить следующие зависимости в приложении

Чтобы это работало, пока оно не обновится, используйте:

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

0

В моем случае эта ошибка произошла, потому что у меня была старая версия ng cli на моем компьютере.

Проблема была решена после запуска:

ng update

ng update @angular/cli


0

Обновите версию angular-in-memory-web-api . Версия angular-in-memory-web-api по умолчанию, установленная во время урока angular-tour-of-heroes, была 0,4. Это работает как шарм в моем случае. (Использование Angular 7 с RxJS 6)

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

-3

использование return Observable.of(HEROES);


1
Хотя этот ответ, вероятно, является правильным и полезным, желательно, чтобы вы включили вместе с ним какое-то объяснение, объясняющее, как оно помогает решить проблему. Это становится особенно полезным в будущем, если есть изменение (возможно, не связанное), которое заставляет его перестать работать, и пользователи должны понять, как это когда-то работало.
Эрти Сейдохл

Если вы внимательно прочитаете вопрос, вы увидите упоминания об Angular 6 и rxjs 6 , а не 5. Эта проблема специфична для rxjs v6 +, а опубликованное вами решение связано с rxjs (и Angular) v5.
Златко
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.