TypeScript 編譯選項
TypeScript 提供了很多不同功能的編譯選項,既可以通過配置 tsconfig.json 文件中的 compilerOptions 屬性來實現編譯,也可以使用在 tsc 命令后跟隨參數這形式,直接編譯 .ts 文件。
注意: 當命令行上指定了輸入文件時,tsconfig.json 文件會被忽略。
1. 慕課解釋
我們通過編譯選項 --watch 為例,在當前目錄創建 main.ts 文件,寫入內容:
enum Season {
Spring,
Summer,
Autumn,
Winter
}
在命令行執行:
tsc main.ts --watch
編譯選項 --watch 使編譯器在監視模式下運行,會監視輸出文件,在它們改變時重新編譯。
2. 編譯選項
| 選項 | 類型 | 默認值 | 描述 |
|---|---|---|---|
| –allowJs | boolean | false | 允許編譯 JavaScript 文件 |
| –allowSyntheticDefaultImports | boolean | false | 允許從沒有設置默認導出的模塊中默認導入 |
| –allowUnreachableCode | boolean | false | 不報告執行不到的代碼錯誤 |
| –allowUnusedLabels | boolean | false | 不報告未使用的標簽錯誤 |
| –alwaysStrict | boolean | false | 以嚴格模式解析并為每個源文件生成 "use strict" 語句 |
--baseUrl |
string | 解析非相對模塊名的基準目錄 | |
| –charset | string | “utf8” | 輸入文件的字符集 |
| –checkJs | boolean | false | 在 .js 文件中報告錯誤,與 --allowJs 配合使用 |
| –declaration -d |
boolean | false | 生成相應的 .d.ts 文件 |
| –declarationDir | string | 生成聲明文件的輸出路徑 | |
| –diagnostics | boolean | false | 顯示診斷信息 |
| –disableSizeLimit | boolean | false | 禁用 JavaScript 工程體積大小的限制 |
| –emitBOM | boolean | false | 在輸出文件的開頭加入BOM頭(UTF-8 Byte Order Mark) |
| –emitDecoratorMetadata[1] | boolean | false | 給源碼里的裝飾器聲明加上設計類型元數據。查看 issue #2577 了解更多信息。 |
| –experimentalDecorators[1] | boolean | false | 啟用實驗性的ES裝飾器 |
| –extendedDiagnostics | boolean | false | 顯示詳細的診斷信息 |
| –forceConsistentCasingInFileNames | boolean | false | 禁止對同一個文件的不一致的引用 |
| –help -h |
打印幫助信息 | ||
| –importHelpers | string | 從 tslib 導入輔助工具函數(比如 __extends, __rest等) |
|
| –inlineSourceMap | boolean | false | 生成單個 sourcemaps 文件,而不是將每 sourcemaps 生成不同的文件 |
| –inlineSources | boolean | false | 將代碼與 sourcemaps 生成到一個文件中,要求同時設置了 --inlineSourceMap 或 --sourceMap 屬性 |
--init |
初始化 TypeScript 項目并創建一個 tsconfig.json 文件 |
||
| –isolatedModules | boolean | false | 將每個文件作為單獨的模塊(與 “ts.transpileModule” 類似) |
| –jsx | string | “Preserve” | 在 .tsx 文件里支持 JSX: “React” 或 “Preserve”。 |
| –jsxFactory | string | “React.createElement” | 指定生成目標為 react JSX 時,使用的 JSX 工廠函數,比如 React.createElement 或 h |
| –lib | string[] | 編譯過程中需要引入的庫文件的列表。 可能的值為: ? ES5 ? ES6? ES2015? ES7? ES2016? ES2017? ES2018? ESNext? ES5? ES5? ES5? ES5? ES5? ES5? DOM? DOM.Iterable? WebWorker? ScriptHost? ES2015.Core? ES2015.Collection? ES2015.Generator? ES2015.Iterable? ES2015.Promise? ES2015.Proxy? ES2015.Reflect? ES2015.Symbol? ES2015.Symbol.WellKnown? ES2016.Array.Include? ES2017.object? ES2017.Intl? ES2017.SharedMemory? ES2017.String? ES2017.TypedArrays? ES2018.Intl? ES2018.Promise? ES2018.RegExp? ESNext.AsyncIterable? ESNext.Array? ESNext.Intl? ESNext.Symbol 注意:如果 --lib 沒有指定默認注入的庫的列表。默認注入的庫為: ? 針對于 --target ES5:DOM,ES5,ScriptHost ? 針對于 --target ES6:DOM,ES6,DOM.Iterable,ScriptHost |
|
| –listEmittedFiles | boolean | false | 打印出編譯后生成文件的名字 |
| –listFiles | boolean | false | 編譯過程中打印文件名 |
| –locale | string | (platform specific) | 顯示錯誤信息時使用的語言,比如:en-us |
| –mapRoot | string | 為調試器指定指定 sourcemap 文件的路徑,而不是使用生成時的路徑。當 .map 文件是在運行時指定的,并不同于 js 文件的地址時使用這個標記。指定的路徑會嵌入到 sourceMap 里告訴調試器到哪里去找它們 | |
| –maxNodeModuleJsDepth | number | 0 | node_modules 依賴的最大搜索深度并加載 JavaScript 文件,僅適用于 --allowJs |
| –module -m |
string | target === “ES6” ? “ES6” : “commonjs” | 指定生成哪個模塊系統代碼: “None”, “CommonJS”, “AMD”, “System”, “UMD”, "ES6"或 “ES2015”。 ? 只有 "AMD"和 "System"能和 --outFile一起使用。 ? "ES6"和 "ES2015"可使用在目標輸出為 "ES5"或更低的情況下。 |
| –moduleResolution | string | module === “AMD” or “System” or “ES6” ? “Classic” : “Node” | 決定如何處理模塊?;蛘呤?“Node” 對于 Node.js/io.js,或者是 “Classic”(默認) |
| –newLine | string | (platform specific) | 當生成文件時指定行結束符: "crlf"(windows)或 "lf"(unix) |
| –noEmit | boolean | false | 不生成輸出文件 |
| –noEmitHelpers | boolean | false | 不在輸出文件中生成用戶自定義的幫助函數代碼,如 __extends |
| –noEmitOnError | boolean | false | 報錯時不生成輸出文件 |
| –noErrorTruncation | boolean | false | 不截短錯誤消息 |
| –noFallthroughCasesInSwitch | boolean | false | 報告 switch 語句的 fallthrough 錯誤。(即,不允許 switch 的 case 語句貫穿) |
--noImplicitAny |
boolean | false | 在表達式和聲明上有隱含的 any 類型時報錯 |
| –noImplicitReturns | boolean | false | 不是函數的所有返回路徑都有返回值時報錯 |
| –noImplicitThis | boolean | false | 當 this 表達式的值為 any 類型的時候,生成一個錯誤 |
| –noImplicitUseStrict | boolean | false | 模塊輸出中不包含 “use strict” 指令 |
| –noLib | boolean | false | 不包含默認的庫文件( lib.d.ts ) |
| –noResolve | boolean | false | 不把 /// <reference``> 或模塊導入的文件加到編譯文件列表 |
| –noStrictGenericChecks | boolean | false | 禁用在函數類型里對泛型簽名進行嚴格檢查 |
| –noUnusedLocals | boolean | false | 若有未使用的局部變量則拋錯 |
| –noUnusedParameters | boolean | false | 若有未使用的參數則拋錯 |
--outDir |
string | 重定向輸出目錄 | |
| –outFile | string | 將輸出文件合并為一個文件,合并的順序是根據傳入編譯器的文件順序和 ///<reference``> 和 import 的文件順序決定的 |
|
| –skipDefaultLibCheck | boolean | false | 忽略庫的默認聲明文件的類型檢查 |
| –skipLibCheck | boolean | false | 忽略所有的聲明文件( *.d.ts )的類型檢查 |
--sourceMap |
boolean | false | 生成相應的 .map 文件 |
| –sourceRoot | string | 指定 TypeScript 源文件的路徑,以便調試器定位。當 TypeScript 文件的位置是在運行時指定時使用此標記, 路徑信息會被加到 sourceMap 里 | |
--strict |
boolean | false | 啟用所有嚴格類型檢查選項 |
| –strictFunctionTypes | boolean | false | 禁用函數參數雙向協變檢查 |
| –strictPropertyInitialization | boolean | false | 確保類的非 undefined 屬性已經在構造函數里初始化。若要令此選項生效,需要同時啟用 --strictNullChecks |
--strictNullChecks |
boolean | false | 在嚴格的 null 檢查模式下,null 和 undefined 值不包含在任何類型里,只允許用它們自己和 any 來賦值(有個例外, undefined 可以賦值到 void) |
| –stripInternal[1] | boolean | false | 不對具有 /** @internal */ JSDoc注解的代碼生成代碼 |
| –suppressExcessPropertyErrors[1] | boolean | false | 阻止對對象字面量的額外屬性檢查 |
| –suppressImplicitAnyIndexErrors | boolean | false | 阻止 --noImplicitAny 對缺少索引簽名的索引對象報錯。查看 issue #1232 了解詳情。 |
--target <br> -t |
string | “ES3” | 指定ECMAScript目標版本 "ES3"(默認), "ES5", "ES6"/ "ES2015", "ES2016", "ES2017" 或 "ESNext"。 注意: "ESNext" 最新的生成目標列表為 ES proposed features |
| –traceResolution | boolean | false | 生成模塊解析日志信息 |
| –types | string[] | 要包含的類型聲明文件名列表 | |
| –typeRoots | string[] | 要包含的類型聲明文件路徑列表 | |
--version <br> -v |
打印編譯器版本號 | ||
| –watch -w |
在監視模式下運行編譯器。會監視輸出文件,在它們改變時重新編譯。監視文件和目錄的具體實現可以通過環境變量進行配置 |
- [1] 這些選項是試驗性的
3. 小結
本小節梳理了 TypeScript 的眾多編譯選項,可以先通讀一遍,大致了解有些什么功能,在項目中需要使用時再來查閱即可。
一飛同學 ·
2025 imooc.com All Rights Reserved |