1、與文件相關的選項
如果 tsconfig.json 中沒有任何配置,編譯器就會按照默認的配置編譯當前目錄下的所有 ts 文件,包括三種類型 ts, d.ts, tsx
// tsconfig.json { "files": [ // 數組,表示編譯器需要編譯的單個文件的列表 "src/a.ts" // 運行 tsc 命令時,只有 a.ts 被編譯了 ], "include": [ // 數組,表示編譯器需要編譯的文件或目錄 "src", // 會編譯 src 目錄下所有的 ts 文件 "src/*", // 只會編譯 src 一級目錄下的 ts 文件 "src/*/*", // 只會編譯 src 二級目錄下的 ts 文件 ], "exclude": [ // 數組,表示編譯器需要排除的文件或目錄,默認會排除 node_modules 下的所有文件和所有的聲明文件 "src/lib", // 表示不會編譯src下的lib目錄 ] }
配置文件之間是可以繼承的,可以把一些基礎的配置抽離出來方便復用,然后通過 extends 選項來導入基礎配置
// tsconfig.base.json { "files": [ // 數組,表示編譯器需要編譯的單個文件的列表 "src/a.ts" // 運行 tsc 命令時,只有 a.ts 被編譯了 ], "include": [ // 數組,表示編譯器需要編譯的文件或目錄 "src", // 會編譯 src 目錄下所有的 ts 文件 "src/*", // 只會編譯 src 一級目錄下的 ts 文件 "src/*/*", // 只會編譯 src 二級目錄下的 ts 文件 ], "exclude": [ // 數組,表示編譯器需要排除的文件或目錄,默認會排除 node_modules 下的所有文件和所有的聲明文件 "src/lib", // 表示不會編譯src下的lib目錄 ] }
// tsconfig.json { "extends": "./tsconfig.base.json", // 還可以覆蓋 tsconfig.base.json 中的配置 "exclude": [], // 指定不排除任何目錄 "compileOnSave": true, // 保存文件時讓編譯器自動編譯,vscode暫不支持 }
2、與編譯相關的選項
// tsconfig.json { "compilerOptions": { "incremental": true, // 增量編譯,ts 編譯器可以在第一次編譯后生成一個可以存儲編譯信息的文件, // 在二次編譯時會根據這個文件做增量編譯,這樣就可以提高編譯的速度 "tsBuildInfoFile": "./buildFile", // 增量編譯文件的存儲位置 "diagnostics": false, // 打印診斷信息 "target": "es5", // 目標語言的版本 "module": "commonjs", // 生成代碼的模塊標准 "outFile": "./app.js", // 將多個相互依賴的文件生成一個文件,可以用在 AMD 模塊中 // 指定 moudle 為 amd ,編譯時會將多個 ts 文件合並打包成一個 js 文件 "lib": [], // ts 需要引用的庫,即聲明文件。就算沒有引用任何類庫,當目標語言的版本是 es5 時 // 也會默認引用 "dom", "es5", "scripthost" "allowJs": true, // 允許編譯 JS 文件(js、jsx) "checkJs": true, // 允許指出在 JS 文件中的報錯信息,通常與 allowJs 一起使用 "outDir": "./out", // 指定輸出目錄(所有編譯后的文件會存放於此目錄中) "rootDir": "./", // 用來控制輸出的目錄結構(指定輸入文件目錄) "declaration": true, // 用於生成聲明文件,如 index.ts -> index.d.ts "declarationDir": "./d", // 聲明文件的路徑 "emitDeclarationOnly": true, // 只生成聲明文件(不會生成 js 文件) "sourceMap": true, // 生成目標文件的 sourceMap,如 index.ts -> index.js.map "inlineSourceMap": true, // 生成目標文件的 inline sourceMap(包含在生成的 js 文件之中) "declarationMap": true, // 生成聲明文件的 sourceMap,如 index.ts -> index.d.ts 和 index.d.ts.map "typeRoots": [], // 聲明文件目錄,默認 node_modules/@types "types": [], // 指定需要加載的聲明文件的包,如果指定了某一個包,就會只加載這個包的聲明文件 "removeComments": true, // 刪除注釋 "noEmit": true, // 不輸出任何文件 "noEmitOnError": true, // 發生錯誤時,不輸出文件 "noEmitHelpers": true, // 不生成 helper 函數,需額外安裝 ts-helpers "importHelpers": true, // 通過 tslib 引入 helper 函數,文件必須是模塊 "downlevelIteration": true, // 降級遍歷器的實現(es3/es5) "strict": true, // 開啟所有嚴格的類型檢查,為 true 時,下面類型檢查相關的取值也都為 true "alwaysStrict": true, // 在代碼中注入 "use strict" "noImplicitAny": true, // 不允許隱式的 any 類型 "strictNullChecks": true, // 不允許把 null、undefined 賦值給其它類型變量 "strictFunctionTypes": true, // 不允許函數參數雙向協變 "strictPropertyInitialization": true, // 類的實例屬性必須初始化 "strictBindCallApply": true, // 嚴格的 bind、call、apply 檢查 "noImplicitThis": true, // 不允許 this 有隱式的 any 類型 "noUnusedLocals": true, // 檢查只聲明,未使用的局部變量 "noUnusedParameters": true, // 檢查未使用的函數參數 "noFallthroughCasesInSwitch": true, // 防止 switch 語句貫穿(如果某一個分支沒有 break,下面的分支將會依次執行) "noImplicitReturns": true, // 每個分支都要有返回值,如 if else 中都要有返回值 "esModuleInterop": true, // 如果一個模塊用 export = 導出, 既可以用 import from 導入,也可以用 import = 導入 "allowUmdGlobalAccess": true, // 允許在模塊中以全局變量的方式訪問 UMD模塊 "moduleResolution": "node", // 模塊解析策略,默認 node,還可以用 classic "baseUrl": "./", // 解析非相對模塊的基地址,默認是當前目錄 "paths": { // 路徑映射,相對於 baseUrl "jquery": ["node_modules/jquery/dist/jquery.slim.min.js"] }, "rootDirs": ["src", "out"], // 將多個目錄放在一個虛擬目錄下,用於運行時 "listEmittedFiles": true, // 打印輸出的文件 "listFiles": true, // 打印編譯的文件(包括引用的聲明文件) } }
classic 模塊策略:
node 模塊策略: