tsconfig 常用設定
tsconfig.json 選項非常多,日常開發真正常調的只有幾個。這一頁挑最重要的講,完整清單看 TSConfig Reference。
strict:一次打開所有嚴格檢查
strict: true 一次打開一整組嚴格檢查,其中最重要的兩個:
strictNullChecks——null/undefined不會被自動當成任何型別都能接受的值,逼你明確處理「這個值可能不存在」的情況。noImplicitAny——參數或變數沒有型別、TypeScript 又推論不出來時直接報錯,避免不小心整個檔案都退化成any。
新專案一律建議打開 strict;舊專案要導入 TypeScript,可以先不開,之後再一項一項打開、修完錯誤再開下一項。
target 與 module:編譯成什麼樣的 JS
tsconfig.json
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "Bundler"
}
}
target:編譯出來的 JS 要相容到多舊的環境(語法層面,例如箭頭函式、class要不要轉譯)。現代瀏覽器與 Node.js LTS 版本用ES2022大致足夠。module:產生import/export(ESNext)還是require/module.exports(CommonJS)。用 Vite、webpack 等建置工具時交給工具處理,通常設ESNext;純 Node.js 專案視package.json的"type"欄位決定。
其他常用選項
| 選項 | 作用 |
|---|---|
outDir |
編譯出來的 .js 要放到哪個資料夾(例如 "dist") |
rootDir |
原始碼根目錄,通常是 "src" |
esModuleInterop |
讓 import express from "express" 這種寫法能正常跟 CommonJS 套件互通 |
skipLibCheck |
跳過對第三方套件型別宣告檔(.d.ts)的檢查,加快編譯速度,一般專案建議開著 |
noUnusedLocals |
有宣告卻沒用到的區域變數要報錯,幫忙清理死程式碼 |
常見完整範例(Node.js 專案)
tsconfig.json
{
"compilerOptions": {
"target": "ES2022",
"module": "CommonJS",
"outDir": "dist",
"rootDir": "src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true
},
"include": ["src"]
}
include 限制 tsc 只編譯 src 資料夾,避免把 node_modules 或設定檔也一起處理。React/Vite 專案的 tsconfig.json 由 create-vite 之類的鷹架工具自動產生,通常不需要自己從零寫起,調整前先看懂目前這份設定在做什麼即可。
相關影音
Matt Pocock(TypeScript 核心貢獻者)錄的速查表,把常用 tsconfig 選項逐一講一遍,適合對照本頁查找還沒提到的選項。