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