Typescript 實戰 --- (11)配置tsconfig.json


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 模塊策略:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM