2017-06-28 3 views
34

私はコンパイルするとき、私はRxJS宣言ファイルに次のコンパイラエラーを取得する:ここで何が起こっているTypeScript 2.4とRxJS 5.xの「Subject is Observable extends Observable」エラーを回避するにはどうすればよいですか?

node_modules/rxjs/Subject.d.ts(16,22): error TS2415: Class 'Subject<T>' incorrectly extends base class 'Observable<T>'. 
    Types of property 'lift' are incompatible. 
    Type '<R>(operator: Operator<T, R>) => Observable<T>' is not assignable to type '<R>(operator: Operator<T, R>) => Observable<R>'. 
     Type 'Observable<T>' is not assignable to type 'Observable<R>'. 
     Type 'T' is not assignable to type 'R'. 

、そしてどのように私は2.3またはそれ以前を活字体にダウングレードすることなく、これを回避できますか?

答えて

88

解決策

RxJS 5.4.2はTypeScript 2.4.1で完全に動作するはずです。 可能であれば、5.4.2+にアップグレードしてください。

npm install --save [email protected]^5.4.2 

もしそうでない場合は、以下の解決策が有効です。 RxJSの

代替ソリューション

新しいバージョンは、この問題が修正されますが、一時的な回避策、としてあなたはnoStrictGenericChecksコンパイラオプションを使用することができます。

tsconfig.jsonには、"compilerOptions"に入れてtrueに設定します。

{ 
    "compilerOptions": { 
     "noStrictGenericChecks": true 
    } 
} 

--noStrictGenericChecksです。

それは

活字体2.4が起こっているのはなぜでは厳密に変更があり、Subject<T>は正しいObservableに持ち上げていません。署名は本当に

<R>(operator: Operator<T, R>) => Observable<R> 

これは私がpackage.jsonファイル内に以下の2つの変更を行ったRxJS 6.

+0

ここでは "--noStrictGenericChecks"を使用しますか? – RemyaJ

+2

'tsconfig.json'の' compilerOptions'です。ダッシュを削除して「真」に設定してください。 –

+0

ありがとう、それは働いた。 :) – RemyaJ

6

で修正される予定になっている必要があります。

1)は、rxjsのバージョンを依存関係のセクションで5.4.1に変更しました。

"依存性":{
"rxjs": "5.4.1" }

2)はdevDependenciesセクションの2.4.0にtypescriptですバージョンを変更しました。

"devDependencies":{ "typescriptです": "2.4.0" }

私は2つの変更を行った後、コマンド 'NPMがインストール' を実行し、それが働きました。

+0

私はあなたの提案を試してみましたが、それは私にとってはうまくいかなかった –

10

今日、このエラーに直面して、これを以下の3つのステップで無計画に解決しました。希望を共有することで、他人を助けるでしょう。

手順1: package.jsonファイルで、エントリを「rxjs」:「5.4。2" 、

ステップ2:は、ルートディレクトリに存在しているプロジェクトからnode_modulesフォルダを削除

ステップ3:さて、右のようにのように復元package.jsonファイルをクリックしてクリック以下に示す: enter image description here

注:それは再びうまくいけばあなたは上記の問題に関連するすべてのビルドエラーを取得してはならない、ソリューションを構築今、新しいファイルでnode_moduleフォルダが作成されます

+1

私の問題を修正しました。公式のAngularウェブサイトのチュートリアルは、最新バージョンのものであると思われますが、そうは思われません。 – breez

+0

はい、あなたはあなたの問題を@breezで修正したことは間違いないと思います。ハッピーシェア.. :) –

+0

私はあなたの提案を試みたが、それは私のために働かなかった –

0

私はpackage.jsonファイルで以下の変更を行いました。

"dependencies": { 
    "@angular/animations": "4.1.3", 
    "@angular/common": "4.4.6", 
    "@angular/compiler": "4.4.6", 
    "@angular/compiler-cli": "2.4.8", 
    "@angular/core": "4.4.6", 
    "@angular/forms": "4.4.6", 
    "@angular/http": "4.4.6", 
    "@angular/platform-browser": "4.4.6", 
    "@angular/platform-browser-dynamic": "4.4.6", 
    "@angular/platform-server": "4.4.6", 
    "@angular/router": "4.4.6", 
    "@ionic/storage": "2.0.0", 
    "cordova-plugin-console": "1.0.5", 
    "cordova-plugin-device": "1.1.4", 
    "cordova-plugin-splashscreen": "~4.0.1", 
    "cordova-plugin-statusbar": "2.2.1", 
    "cordova-plugin-whitelist": "1.3.1", 
    "ionic-angular": "2.2.0", 
    "ionic-native": "2.4.1", 
    "ionic-plugin-keyboard": "~2.2.1", 
    "ionic-tooltips": "^2.0.0", 
    "ionicons": "3.0.0", 
    "rxjs": "^5.4.2", 
    "sw-toolbox": "3.4.0", 
    "typescript": "2.4.0", 
    "zone.js": "0.7.2" 
    } 

rxjsおよびtypescriptバージョンの変更。あなたのSubjectクラスで

0

変更この行:

lift<R>(operator: Operator<T, R>): Observable<T>; 

へ:

lift<R>(operator: Operator<T, R>): Observable<R>; 
0

tsconfig.jsonファイル

"noStrictGenericChecks": true 

を追加します。

関連する問題