TypeScript 模塊系統(tǒng)

? 在TypeScript中,和ECMAScript 2015一樣,任何包含頂級導(dǎo)入或?qū)С龅奈募急徽J為是一個模塊。相反,沒有任何頂級導(dǎo)入或?qū)С雎暶鞯奈募灰暈槟_本(script,意義為js邏輯片段),其內(nèi)容可在全局作用域中使用(因此也可用于模塊)。
? ? 腳本暴露在全局作用域的var變量會追加到window上,可以通過window.xxx訪問;而使用const、let聲明的變量僅僅存在于全局作用域中無法通過window.xxx訪問,但是可以直接使用變量名使用。
? ?模塊在它們自己的作用域中執(zhí)行,而不是在全局作用域中執(zhí)行。這意味著在模塊中聲明的變量、函數(shù)、類等在模塊外部是不可見的,除非它們使用導(dǎo)出標識符顯式導(dǎo)出。相反,要使用從不同模塊導(dǎo)出的變量、函數(shù)、類、接口等,必須使用導(dǎo)入語法導(dǎo)入。
? ? ES模塊的知識不再贅述下面講解一下TypeScript的模塊系統(tǒng)。
? ? TypeScript類型系統(tǒng)的成員幾乎都無法編譯成JS代碼,但是在編碼階段的類型檢查依賴于類型系統(tǒng)提供的線索,所以就出現(xiàn)了TS模塊系統(tǒng)獨有的“類型引入”,我們可以和ES模塊一樣通過“import”引入interface、type、class,也就是說我們可以混合引入ES對象和TS類型成員。為了方便打包框架解析我們可以使用type標識符將TS類型系統(tǒng)的成員,從而將ES對象和TS對象分開對待。
????上述示例解釋了type關(guān)鍵字的使用方法,對于純類型引入我們可以將type關(guān)鍵字置于imort之后,表示引入的都是TS類型系統(tǒng)成員;對于不全都是類型的引入我們可以在類型前單獨標記type。type的意義在于表示僅作為類型標注使用,如果參與實例化(new class)則會報錯,且打包工具可以完全忽略此導(dǎo)入。