読み込み時間を制限するために、Observable
演算子を個別にインポートすることを常に知っていました。しかし、今日、誰かが私に説明してくれることを願っている何かに気づきました。
IntelliJ/WebStormをWebpackで使用しています。
ngOnInit
のページでhttp呼び出しがあるとしましょう。
ngOnInit() {
this.http.get('https//:google.com').map(e => e);
}
マップ演算子をインポートしないと、コンパイラが文句を言うので、次のようにインポートします。
import 'rxjs/add/operator/map';
すべてが世界で良いです。 Observableを使用する必要があるまで。だから、1つ追加します。
ngOnInit() {
let test = Observable.create(subscriber => {
return null;
});
this.http.get('https//:google.com').map(e => e);
}
これで、コンパイラはObservableが見つからないと不平を言うので、IntelliJ/WebStormにインポートしてもらい、ファイルの先頭に追加します。
import {Observable} from 'rxjs';
すべてが再び良いです。しかし、この新しいインポートにより、マップのインポートは無関係になるようです。つまり、マップインポートを削除し、Observableをそのままにしておくと、すべて正常にコンパイルされます...
ただし、次のようにObservableをインポートするように指定した場合:
import {Observable} from 'rxjs/Observable';
次に、マップ演算子のインポートを再度追加する必要があります...
このようにObservableをインポートするときに、すべてのRxJSをインポートしますか?
import {Observable} from 'rxjs';
もしそうなら、どうすればIntelliJにそれを行わず、クラスのみをインポートするように指示できますか?
必要なrxjsの監視可能なクラス拡張子と演算子を含むファイル(例:rxjs-extensions.ts)を持っていないのはなぜですか?
// Observable class extensions
import 'rxjs/add/observable/throw';
// Observable operators
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/map';
次に、メインモジュール(例:app.module.ts)でこのファイルからインポートします。
import './rxjs-extensions';
そして、メインコンポーネント(例:app.component.ts)にObservavleをインポートするだけです:
import { Observable } from 'rxjs/Rx';
これは、メインのangularチュートリアルでカバーされている方法です。
WebStorm 2016.3(私は信じています)から、特定のインポートをブラックリストに登録するオプションがあります。 Editor > Code Style > StypeScript
Do not import exactly from: [rxjs]
さらに、グローバルインポートを禁止するためにtslintで使用可能なフラグがあります。
{
"rules": {
"import-blacklist": [true, "rxjs"]
}
}