編譯器配置項-compilerOptions
操作約束相關配置項02
強制文件名大小寫一致 - forceConsistentCasingInFileNames
對于文件的大小寫規(guī)則,TypeScript默認與文件系統(tǒng)保持一直。如果一些開發(fā)人員在區(qū)分大小寫的文件系統(tǒng)中工作(linux),而其他開發(fā)人員在不區(qū)分大小寫的文件系統(tǒng)上工作(windows),這可能會出現(xiàn)問題。如果嘗試通過指定 ./FileManager.ts 導入 fileManager.ts文件,那么該文件將在不區(qū)分大小寫的文件系統(tǒng)中被找到,而在區(qū)分大小寫的文件系統(tǒng)中不會被找到。
啟用該選項后,如果代碼中使用與磁盤上文件大小寫字符不一致的文件名導入該文件,TypeScript 將發(fā)出錯誤消息。
隔離類型聲明 - isolatedDeclarations
對導出對象添加充足的注釋,以便其他工具可以輕松生成聲明文件。
隔離模塊 - isolatedModules
雖然您可以使用 TypeScript 從 TypeScript 代碼生成 JavaScript 代碼,但使用 Babel 等其他轉譯器來執(zhí)行此操作也很常見。然而,其他轉譯器一次只能操作一個文件,這意味著它們無法依賴于理解完整類型系統(tǒng)下進行代碼的轉換。此限制也適用于那些使用TypeScript模塊API方法 ts.transpile的構建工具 。
這些限制可能會導致某些 TypeScript 功能(例如 const enum和namespace)出現(xiàn)運行時問題。設置isolatedModules標志告訴TypeScript在你編寫的某些代碼無法被單文件轉譯進程正確解釋時發(fā)出警告。
它不會改變代碼的行為,也不會改變 TypeScript 檢查和輸出內容進程的行為。
下邊是啟用isolatedModules時無效代碼的示例。
導出未定義的值時
在 TypeScript 中,您可以導入類型,然后將其導出:
import { someType, someFunction } from "someModule";
someFunction();
export { someType, someFunction };
因為 someType 沒有值,所以輸出export時不會嘗試導出它(這將會在 JavaScript 運行時產(chǎn)生錯誤):
export { someFunction };
單文件轉譯器不知道 someType 是否被定義,因此導出僅引用類型的名稱是錯誤的。
非模塊文件
如果設置了isolatedModules,namespace僅在模塊中被允許使用(這意味著它具有某種形式的 import/export)。如果在非模塊文件中找到namespace,則會發(fā)生錯誤:
namespace Instantiated {
Namespaces are not allowed in global script files when 'isolatedModules' is enabled. If this file is not intended to be a global script, set 'moduleDetection' to 'force' or add an empty 'export {}' statement.
export const x = 1;
}
這個不適用于 .d.ts 文件。
引用常量枚舉成員
在 TypeScript 中,當您引用 const enum 成員時,在輸出的JavaScript代碼中該引用將被實際值替換。例如以下TypeScript代碼:
declare const enum Numbers {
Zero = 0,
One = 1,
}
console.log(Numbers.Zero + Numbers.One);
將輸出 JavaScript代碼如下:
"use strict";
console.log(0 + 1);
如果不知道這些枚舉成員的值,那么其他轉譯器就無法將枚舉成員替換為 Numbers 。如果不進行替換的話,這將會產(chǎn)生運行時錯誤(因為運行時沒有Numbers 對象)。因此,當設置isolatedModules時,引用環(huán)境常量枚舉成員將會產(chǎn)生錯誤。