我使用node.js,我最近决定给TypeScript一个镜头,但我对模块的导入方式感到困惑.我看到两种不同的语法,我无法确切地知道它们的区别是什么:
import * as a from 'a'; // ES6 standard to import stuff
// OR ...
import a = require('a');
Run Code Online (Sandbox Code Playgroud)
这些是一回事吗?如果他们不是,我应该在哪里使用它们?
我总是知道Observable单独导入我的运算符来限制加载时间.但是我今天注意到了一些事情,我希望有人可以向我解释.
我在Webpack上使用IntelliJ/WebStorm.
让我们在我的网页上说ngOnInit我有一个http电话:
ngOnInit() {
this.http.get('https//:google.com').map(e => e);
}
Run Code Online (Sandbox Code Playgroud)
如果我不导入map运算符,编译器会抱怨,所以我像这样导入它:
import 'rxjs/add/operator/map';
Run Code Online (Sandbox Code Playgroud)
一切都在世界上很好.直到我需要使用Observable.所以,我会加一个.
ngOnInit() {
let test = Observable.create(subscriber => {
return null;
});
this.http.get('https//:google.com').map(e => e);
}
Run Code Online (Sandbox Code Playgroud)
现在编译器可以理解地抱怨它找不到Observable,所以我让IntelliJ/WebStorm为我导入它并将其添加到我的文件顶部:
import {Observable} from 'rxjs';
Run Code Online (Sandbox Code Playgroud)
一切都好了.但是,这个新的导入似乎使地图导入无关紧要.我的意思是,如果我删除了地图导入并且只留下了Observable,那么所有编译都很好......
但是,如果我指定像这样导入Observable:
import {Observable} from 'rxjs/Observable';
Run Code Online (Sandbox Code Playgroud)
然后我必须为地图操作员重新添加导入...
我导入我的Observable时是否导入了所有RxJS?
import {Observable} from 'rxjs';
Run Code Online (Sandbox Code Playgroud)
如果是这样,我怎么能告诉IntelliJ不这样做并仅导入类?