天天看點

ts筆記-子產品

在全局命名空間中定義的子產品就是全局子產品,示例:

以上這種方式編譯是通過的,因為foo在全局命名空間中,是以其他任何檔案都可以引用foo。顯然這是危險行為。

檔案子產品也被稱為外部子產品,當我們使用import/export導入導出子產品時,他會在目前檔案中建立一個本地作用域。

js子產品系統有多種實作方式,常見的規範有<code>commonjs, amd, es modules</code>,amd它僅能在浏覽器工作,esmodule目前存在浏覽器相容問題,是以更推薦使用node推出的commonjs規範。

在ts中設定<code>module:commonjs</code>,可以讓我們像使用es modules一樣使用commonjs。

import導入支援相對路徑和絕對路徑,相對路徑比較簡單不做過多解釋,絕對路徑的查找順序是下面這樣的:

當你使用 import * as foo from 'foo',将會按如下順序查找子產品:

./node_modules/foo

../node_modules/foo

../../node_modules/foo

直到系統的根目錄

當你使用 import * as foo from 'something/foo',将會按照如下順序查找内容

./node_modules/something/foo

../node_modules/something/foo

../../node_modules/something/foo

place解釋了子產品查找的方式,具體如下:

如果place是一個檔案,并且存在foo.ts,命中

如果place是一個檔案夾,并且存在foo/index.ts,命中

如果place是一個檔案夾,并且存在foo/package.json,并且檔案中指定的types檔案存在,命中

如果place是一個檔案夾,并且存在package.json,并且檔案中指定的main檔案存在,命中

上面place介紹的查找方式,是可以人為修改的。我們可以定義一個<code>global.d.ts</code>檔案,修改它的查找位置。

global.d.ts 檔案,用來将一些接口或者類型放入全局命名空間裡,這些定義的接口和類型能在你的所有 typescript 代碼裡使用。對于一些新手和沒有聲明的第三方庫可以使用global.d.ts避免報錯。

上面這行代碼做了兩件事:第一是導入foo 子產品的所有類型資訊,二是确定 foo 子產品運作時的依賴關系。

如果沒有foo當作變量聲明空間使用,那麼編譯成js時候上面的導入代碼會被自動移除。

常用網站:

segmentfault |

github |

掘金社群

繼續閱讀