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