前言:tsconfig.json中的配置
一、前端領域中的模塊化標準
前端領域中的模塊化標準有:?ES6、commonjs、amd、umd、system、esnext?
二、 TS中如何書寫模塊化語句
?TS 中,導入和導出模塊,統一使用 ES6 的模塊化標準。
myModule.ts :
export const name = "kevin";export function sum(a: number, b: number) { return a + b;
}
index.ts :
import { sum, name } from "./myModule";console.log(sum(1, 2)); // 3
console.log(name); // kevin
注意:在導入模塊時不要加后綴名。因為后綴名會編譯到結果中,編譯結果找不到 .ts 文件會報錯。
三、編譯結果中的模塊化
1.在 tsconfig.json 中配置 module 參數為?es6 時:
結果:沒有區別。?
2.在 tsconfig.json 中配置 module 參數為 commonjs?時:?
結果:導出的聲明會變成 exports 的屬性,默認的導出會變成 exports 的 default 屬性。導入時,會將整個對象拿到取屬性值。
?"ues strict" 為 js 中的嚴格模式,由于 ts 已經足夠嚴格,因此可以通過配置?"noImplicitUseStrict": true 移除編譯結果中的嚴格模式?"ues strict" 。
由于選項 "noImplicitUseStrict" 已棄用,將停止在 TypeScript 5.5 中運行。因此需要配置?"ignoreDeprecations": "5.0" 來忽略警告,5.0表示忽略5.0版本的警告。
四、解決默認導入的錯誤
當導入 nodejs 的模塊時,由于模塊不是基于 ts 開發的,導出使用的是?module.export = {} ,所以會報錯模塊沒有默認導出。
解決方法1:不使用默認導入,改為具名導入。
解決方法2:導入所有聲明
解決方法3: tsconfig.json 中配置?"esModuleInterop": true ,啟用 es 的模塊化標準交互非 es 模塊導出。
編譯結果中生成一個輔助函數,導入默認模塊。判斷模塊導出方式是否為 es 導出,如果不是,為模塊增加一個 default 屬性。
?tsconfig.json 中的其他配置: "noEmitOnError": true, // 配置編譯失敗是否生成編譯結果
五、如何在TS中書寫commonjs模塊化代碼?
不建議使用。?
?1.方法一:使用這種方式獲取不到類型檢查
?2.方法二:這里可以獲取到類型檢查
3. 方法三:方法二中使用 require?
六、模塊解析
模塊解析:應該從什么位置尋找模塊。?
?TS 中,有兩種模塊解析策略:
- classic:經典
- node: node 解析策略(唯一的變化是將 js 替換為 ts )
?node 解析策略:
- 相對路徑:require("./xxx")
- 非相對路徑:require("xxx")?
?在 tsconfig.json 中配置?"moduleResolution": "node" 來配置模塊化標準的解析方式為 node 。