Skip to content

建立 2026-09-15 更新 2026-09-15

tsconfig 常用設定

tsconfig.json 選項非常多,日常開發真正常調的只有幾個。這一頁挑最重要的講,完整清單看 TSConfig Reference

strict:一次打開所有嚴格檢查

tsconfig.json
{
  "compilerOptions": {
    "strict": true
  }
}

strict: true 一次打開一整組嚴格檢查,其中最重要的兩個:

  • strictNullChecks——nullundefined 不會被自動當成任何型別都能接受的值,逼你明確處理「這個值可能不存在」的情況。
  • 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/exportESNext)還是 require/module.exportsCommonJS)。用 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.jsoncreate-vite 之類的鷹架工具自動產生,通常不需要自己從零寫起,調整前先看懂目前這份設定在做什麼即可。

相關影音

Matt Pocock(TypeScript 核心貢獻者)錄的速查表,把常用 tsconfig 選項逐一講一遍,適合對照本頁查找還沒提到的選項。