NPM包的類型
TypeScript編譯器處理Node模塊名時使用的是[Node.js模塊解析算法](https://nodejs.org/api/modules.html#modules_all_together)。
TypeScript也可以同時加載與npm包綁在一起的類型聲明文件。
編譯通過下面的規(guī)則來查找`"foo"`模塊的類型信息:
1. 嘗試加載相應(yīng)代碼包目錄下`package.json`文件(`node_modules/foo/`)。
如果存在,從`"typings"`字段里讀取類型文件的路徑。比如,在下面的`package.json`里,編譯器會認為類型文件位于`node_modules/foo/lib/foo.d.ts`。
```json
{
"name": "foo",
"author": "Vandelay Industries",
"version": "1.0.0",
"main": "./lib/foo.js",
"typings": "./lib/foo.d.ts"
}
```
2. 嘗試加載在相應(yīng)代碼包目錄下的名字為`index.d.ts`的文件(`node_modules/foo/`) - 這個文件應(yīng)該包含了這個代碼包的類型信息。
解析模塊的詳細算法可以在[這里](https://github.com/Microsoft/TypeScript/issues/2338)找到。
### 你的定義文件應(yīng)該
* 是`.d.ts`文件
* 寫做外部模塊
* 不包含`///`引用
基本的原理是類型文件不能引入新的可編譯代碼;
否則真正的實現(xiàn)文件就可能會在編譯時被重蓋。
另外,**加載類型信息不應(yīng)該污染全局空間**,當從同一個庫的不同版本中引入潛在沖突的實體的時候。