Typescript的tsconfig.json
比如裝飾器如果不配置會(huì)報(bào)這個(gè)錯(cuò)Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option in your 'tsconfig' or 'jsconfig' to remove this warning;
解決在Typescript中報(bào)Cannot redeclare block-scoped variable的錯(cuò)誤,也需要配置一下tsconfig.json文件的 "lib": ["es2015"]
本文主要介紹兩點(diǎn):
運(yùn)行tsconfig.json
tsconfig.json的參數(shù)配置
運(yùn)行tsconfig.json
我們通過(guò)tsc --init 可以生成tsconfig.json文件,那我們生成的tsconfig.json[1]配置文件怎么運(yùn)行呢?
我們直接輸入tsc或者tsc -p tsconfig.json時(shí),默認(rèn)會(huì)調(diào)用tsconfig.json;
在命令行上指定輸入文件時(shí),將忽略tsconfig.json文件。這樣的情況下,只能通過(guò)命令輸入配置來(lái)運(yùn)行,這也是為什么明明配置了tsconfig.json,但是沒(méi)有生效。舉個(gè)例子:
$ tsc index3.ts --t es5 --experimentalDecorators
監(jiān)控ts文件的變化可以使用tsc -w,更多指令在命令行輸入tsc --help查看
tsconfig.json的參數(shù)配置
tsconfig.json這個(gè)文件的參數(shù)有很多,有時(shí)不知道是什么意思,有什么作用,下一次碰到的時(shí)候還是不太會(huì),這里做個(gè)表格,用的時(shí)候方便查閱。
選項(xiàng) | 描述 |
---|---|
incremental | 啟動(dòng)增量編譯 |
target | 指定ECMAScript目標(biāo)版本 "ES3"(默認(rèn)), "ES5", "ES6"/ "ES2015", "ES2016", "ES2017"或 "ESNext"。 |
module | 指定使用什么模塊代碼生成:"None", "CommonJS", "AMD", "System", "UMD", "ES6"或 "ES2015"。只有 "AMD"和 "System" --outFile一起使用。"ES6"和 "ES2015"可使用在目標(biāo)輸出為 "ES5"或更低的情況下。 |
lib | 編譯過(guò)程中需要引入的庫(kù)文件的列表??赡艿闹禐椋篍S5、ES6、ES2015、ES7、ES2016、ES2017、ES2018、ESNext、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沒(méi)有指定默認(rèn)注入的庫(kù)的列表。默認(rèn)注入的庫(kù)為:針對(duì)于--target ES5:DOM,ES5,ScriptHost、針對(duì)于--target ES6:DOM,ES6,DOM.Iterable,ScriptHost |
allowJs | 允許編譯javascript文件 |
checkJs | 在 .js文件中報(bào)告錯(cuò)誤 |
jsx | 在 .tsx文件里支持JSX:"React","react-native"或 "Preserve" |
declaration | 生成相應(yīng)的 .d.ts文件 |
declarationMap | 為每個(gè)相應(yīng)的“ .d.ts”文件生成一個(gè)sourcemap文件 |
sourceMap | 生成相應(yīng)的 .map文件 |
outFile | 將輸出文件合并為一個(gè)文件 |
outDir | 重定向輸出目錄 |
rootDir | 用來(lái)控制輸出的目錄結(jié)構(gòu) |
composite | 啟用項(xiàng)目編譯 |
tsBuildInfoFile | 指定文件去存儲(chǔ)增量編譯信息 |
removeComments | 刪除所有注釋,除了以 /!*開(kāi)頭的版權(quán)信息 |
noEmit | 不生成輸出文件 |
importHelpers | 從 tslib 導(dǎo)入輔助工具函數(shù)(比如 __extends, __rest等) |
downlevelIteration | 當(dāng)針對(duì)“ ES5”或“ ES3”時(shí),在“ for-of”,傳播和解構(gòu)中為可迭代項(xiàng)提供全面支持 |
isolatedModules | 將每個(gè)文件作為單獨(dú)的模塊(與“ts.transpileModule”類似) |
strict | 啟用所有嚴(yán)格類型檢查選項(xiàng) |
noImplicitAny | 在表達(dá)式和聲明上有隱含的 any類型時(shí)報(bào)錯(cuò) |
strictNullChecks | 在嚴(yán)格的 null檢查模式下, null和 undefined值不包含在任何類型里,只允許用它們自己和 any來(lái)賦值(有個(gè)例外, undefined可以賦值到 void) |
strictFunctionTypes | 啟動(dòng)對(duì)函數(shù)類型的檢查 |
strictBindCallApply | 在函數(shù)上啟動(dòng)"bind","call"和"apply" |
strictPropertyInitialization | 確保類的非undefined屬性已經(jīng)在構(gòu)造函數(shù)里初始化。若要令此選項(xiàng)生效,需要同時(shí)啟用--strictNullChecks |
noImplicitThis | 當(dāng) this表達(dá)式的值為 any類型的時(shí)候,生成一個(gè)錯(cuò)誤 |
alwaysStrict | 以嚴(yán)格模式解析并為每個(gè)源文件生成 "use strict"語(yǔ)句 |
noUnusedLocals | 若有未使用的局部變量則拋錯(cuò) |
noUnusedParameters | 若有未使用的參數(shù)則拋錯(cuò) |
noImplicitReturns | 不是函數(shù)的所有返回路徑都有返回值時(shí)報(bào)錯(cuò) |
noFallthroughCasesInSwitch | 不允許switch的case語(yǔ)句貫穿 |
moduleResolution | 如何解析模塊:'node' (Node.js) or 'classic' (TypeScript pre-1.6) |
baseUrl | 解析文檔目錄 |
paths | 模塊名到基于 baseUrl的路徑映射的列表 |
rootDirs | 用來(lái)控制輸出的目錄結(jié)構(gòu) |
typeRoots | 要包含的類型聲明文件路徑列表 |
types | 要包含的類型聲明文件名列表 |
allowSyntheticDefaultImports | 允許從沒(méi)有設(shè)置默認(rèn)導(dǎo)出的模塊中默認(rèn)導(dǎo)入。這并不影響代碼的輸出,僅為了類型檢查 |
esModuleInterop | 通過(guò)所有導(dǎo)入創(chuàng)建名稱空間對(duì)象,啟用CommonJS和ES模塊之間的相互操作 |
preserveSymlinks | 不把符號(hào)鏈接解析為其真實(shí)路徑;將符號(hào)鏈接文件視為真正的文件 |
allowUmdGlobalAccess | 允許從模塊訪問(wèn)UMD全局變量 |
sourceRoot | 指定TypeScript源文件的路徑,以便調(diào)試器定位。當(dāng)TypeScript文件的位置是在運(yùn)行時(shí)指定時(shí)使用此標(biāo)記。路徑信息會(huì)被加到 sourceMap里 |
mapRoot | 為調(diào)試器指定指定sourcemap文件的路徑,而不是使用生成時(shí)的路徑。當(dāng) .map文件是在運(yùn)行時(shí)指定的,并不同于 js文件的地址時(shí)使用這個(gè)標(biāo)記。指定的路徑會(huì)嵌入到 sourceMap里告訴調(diào)試器到哪里去找它們。 |
inlineSourceMap | 生成單個(gè)sourcemaps文件,而不是將每sourcemaps生成不同的文件 |
inlineSources | 將代碼與sourcemaps生成到一個(gè)文件中,要求同時(shí)設(shè)置了 --inlineSourceMap或 --sourceMap屬性 |
experimentalDecorators | 啟動(dòng)裝飾器 |
emitDecoratorMetadata | 給源碼里的裝飾器聲明加上設(shè)計(jì)類型元數(shù)據(jù) |
skipLibCheck | 忽略所有的聲明文件( *.d.ts)的類型檢查 |
forceConsistentCasingInFileNames | 禁止對(duì)同一個(gè)文件使用大小寫(xiě)不一致的引用 |
常用的tsconfig.json配置:
- {
- "target": "ES2015",
- "module": "commonjs",
- "sourceMap": true,
- "outDir": "./script",
- "strict": true,
- "strictNullChecks": true,
- "strictFunctionTypes": true,
- "noImplicitThis": true,
- "alwaysStrict": true,
- "noImplicitReturns": true,
- "noFallthroughCasesInSwitch": true,
- "esModuleInterop": true,
- "skipLibCheck": true,
- "forceConsistentCasingInFileNames": true
- }
參考資料
[1]
tsconfig: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html