Angular-「エクスポートされたメンバー 'Observable'はありません」


156

コード

エラー情報

Typescriptコード:

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 Angularバージョンのファイル:

バージョン


3
使用しているフレームワークの名前はAngularです。AngularJSは別のフレームワークです。
JBニゼット2018

9
RxJS 6を使用しているようです。そのバージョンを使用する場合は、インポートを変更する必要があります(リリースノートを参照)。あなたが角度6を使用していない場合は、RxJS 5に固執すべきである
JB Nizet

thx.I'm使用Angular6.0〜
トーマス・リー・

5
次に、関連するドキュメントを示します。next.angular.io / guide / rx-library。インポートは使用しているものではないことに注意してください。
JBニゼット2018

回答:


205

詳細については、Angular 6で役立つ可能性があります。このドキュメントを参照してください。

  1. rxjs:作成方法、タイプ、スケジューラー、およびユーティリティー
import {Observable、Subject、asapScheduler、pipe、of、from、interval、merge、fromEvent} from 'rxjs';
  1. rxjs / operators:すべてのパイプ可能な演算子:
'rxjs / operators'から{マップ、フィルター、スキャン}をインポートします。
  1. rxjs / webSocket: Webソケットのサブジェクトの実装
'rxjs / webSocket'から{webSocket}をインポートします。
  1. rxjs / ajax:Rx ajax実装
'rxjs / ajax'から{ajax}をインポートします。
  1. rxjs / testing:テストユーティリティ
'rxjs / testing'から{TestScheduler}をインポートします。

4
どうすればこれを解決できますか?最初から?SOの検索は機能しますが、ライブラリの使用頻度が低い場合。
cjb110

12
npm install rxjs-compat --save
EvAlex

115

どうやら(エラーログで指摘したように)、Angular 6.0.0に更新した後、rxjs-compatが見つかりません。

実行npm install rxjs-compat --saveしてインストールします。修正する必要があります。


3
私も同じ問題に直面していますが、下位互換性パッケージを使用したくない場合はどうなりますか?
Prasanna Sasne

2
rxjs-compatを使用しない場合はどうなりますか?
エンリコ

2
これが正解です。これは正しい答えではありません...しかし、間違いなく「今」の答えです。
ウィリアムテリル

96

ちょうど置く:

import { Observable} from 'rxjs';

そのように。多かれ少なかれ何もない。


6
「rxjs / Observable」の代わりに「rxjs」を使用すると、問題が解決しました。質問の所有者はあなたの答えを受け入れるべきだと思います。
Levent Divilioglu 2018

1
これは間違いなく動作します。しかし、それはまたツリーシェイキングをサポートしますか?
Sandy


30

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からのみサポートされるため、これが最善の方法だと思います。
デビッドD.

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

まあそれは彼が始めたエラーでした、輸出はそこにありません。
Zlatko

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-tour-of-heroesでインストールされたデフォルトのangular-in-memory-web-apiバージョンは0.4でした。私の場合、それは魅力のように機能しました。(RxJS 6でAngular 7を使用)

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

-3

使用する return Observable.of(HEROES);


1
この答えはおそらく正しいと便利ですが、問題の解決にどのように役立つかを説明するためにいくつかの説明を含めることが望ましいです。これは、動作が停止する原因となる変更(おそらく無関係)があり、ユーザーがいったんどのように動作したかを理解する必要がある場合に、将来的に特に役立ちます。
Erty Seidohl、2018年

質問を注意深く読むと、5ではなくAngular 6とrxjs 6についての言及が表示されます。この問題はrxjs v6 +に固有ですが、投稿したソリューションはrxjs(およびAngular)v5に関連しています。
Zlatko
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.