TypeScript編譯選項使用及說明
一、前言
在開發(fā) TypeScript 項目時,一個非常關鍵的文件就是 tsconfig.json。它不僅定義了項目的根目錄、模塊解析方式,還控制著 TypeScript 編譯器的行為。
本文將帶你全面了解:
- ?
tsconfig.json的作用 - ? 常用編譯選項(compilerOptions)詳解
- ? 不同環(huán)境下的配置建議(開發(fā) / 生產(chǎn))
- ? 配置繼承與共享設置
- ? 實際開發(fā)中的常見問題與解決方法
并通過完整的代碼示例幫助你掌握如何正確配置 TypeScript 項目。
二、什么是tsconfig.json?
定義:
tsconfig.json 是 TypeScript 項目的配置文件,用于指定項目的編譯選項和行為。
當你在項目根目錄下添加該文件后,TypeScript 編譯器會自動識別并應用這些配置。
作用:
- 指定編譯目標(ES 版本、模塊系統(tǒng)等)
- 控制類型檢查嚴格程度
- 設置輸出目錄
- 支持路徑別名、裝飾器等功能
三、基本結構示例
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"lib": ["ES2020", "DOM"],
"strict": true,
"moduleResolution": "node",
"esModuleInterop": true,
"skipLibCheck": true,
"outDir": "./dist",
"rootDir": "./src",
"baseUrl": ".",
"paths": {
"@/*": ["./*"]
},
"sourceMap": true,
"declaration": false,
"removeComments": true,
"noEmit": false,
"watch": false
},
"include": ["src/**/*"]
}四、常用編譯選項詳解
1.target:指定編譯目標版本
"target": "ES2020"
常見值:
"ES3"(默認)"ES5""ES2015"(ES6)"ES2020""ESNext"
2.module:指定模塊系統(tǒng)
"module": "ESNext"
常見值:
"CommonJS"(Node.js 默認)"ESNext"(推薦用于現(xiàn)代瀏覽器)"UMD"、"AMD"等
3.lib:指定編譯過程中使用的庫
"lib": ["ES2020", "DOM"]
示例組合:
- 瀏覽器環(huán)境:
["ES2020", "DOM"] - Node.js 環(huán)境:
["ES2020", "ES2021.Promise", "ES2021.String"]
4.strict:啟用所有嚴格類型檢查選項
"strict": true
包含以下子選項(開啟后不可單獨關閉):
strictNullChecksstrictFunctionTypesstrictBindCallApplystrictPropertyInitializationnoImplicitThisalwaysStrict
5.moduleResolution:模塊解析策略
"moduleResolution": "node"
常見值:
"classic"(舊版)"node"(推薦用于 Node.js 或 Webpack 項目)
6.esModuleInterop:允許 CommonJS 和 ES 模塊互操作
"esModuleInterop": true
推薦開啟,避免導入時出現(xiàn) .default 問題。
7.skipLibCheck:跳過類型聲明文件的檢查
"skipLibCheck": true
推薦開啟以加快編譯速度。
8.outDir:指定輸出目錄
"outDir": "./dist"
9.rootDir:指定源碼目錄
"rootDir": "./src"
10.baseUrl與paths:配置路徑別名
"baseUrl": ".",
"paths": {
"@/*": ["./*"]
}使用方式:
import utils from '@/utils/index';
11.sourceMap:生成 source map 文件
"sourceMap": true
用于調(diào)試,生產(chǎn)環(huán)境可設為 false。
12.declaration:是否生成.d.ts類型聲明文件
"declaration": true
適用于庫項目,方便別人使用你的包。
13.removeComments:是否移除注釋
"removeComments": true
14.noEmit:是否生成編譯后的文件
"noEmit": false
開發(fā)階段可設為 true,只進行類型檢查。
15.watch:監(jiān)聽文件變化并重新編譯
"watch": true
五、不同環(huán)境的配置建議
| 場景 | 開發(fā)環(huán)境 | 生產(chǎn)環(huán)境 |
|---|---|---|
| target | "ESNext" | "ES2020" |
| lib | "ESNext", "DOM" | "ES2020", "DOM" |
| strict | true | true |
| skipLibCheck | true | true |
| outDir | "./dist" | "./dist" |
| sourceMap | true | false |
| declaration | 可選 | true(如果是庫) |
| noEmit | true(僅類型檢查) | false |
六、配置繼承與復用
你可以通過 extends 屬性繼承其他配置文件,便于多個項目共用配置。
{
"extends": "@myorg/tsconfig-base",
"compilerOptions": {
"outDir": "./dist"
}
}常見基礎配置包:
@tsconfig/recommended@tsconfig/node18- 自定義 npm 包(如團隊內(nèi)部統(tǒng)一配置)
七、常見問題與解決方案
| 問題 | 解決方案 |
|---|---|
| 導入模塊提示找不到 .default | ? 啟用 esModuleInterop |
| 報錯:Object is possibly 'undefined' | ? 啟用 strictNullChecks 或加類型判斷 |
| 編譯太慢 | ? 啟用 skipLibCheck |
| 無法使用 JSX | ? 設置 jsx: "react" 或其它支持 |
| 不能識別路徑別名 | ? 設置 baseUrl 和 paths |
| 輸出目錄為空 | ? 檢查 outDir 和 rootDir 是否正確 |
| 類型報錯但不影響運行 | ? 檢查是否啟用了 strict 模式 |
八、總結對比表:常用 compilerOptions 對比
| 選項 | 說明 | 推薦值 |
|---|---|---|
| target | 編譯目標版本 | "ES2020" |
| module | 模塊系統(tǒng) | "ESNext" |
| lib | 使用的庫 | ["ES2020", "DOM"] |
| strict | 啟用嚴格模式 | true |
| moduleResolution | 模塊解析方式 | "node" |
| esModuleInterop | 允許 ES 模塊互操作 | true |
| skipLibCheck | 跳過 lib 檢查 | true |
| outDir | 輸出目錄 | "./dist" |
| rootDir | 源碼目錄 | "./src" |
| baseUrl & paths | 路徑別名 | ".", {"@/*": ["./*"]} |
| sourceMap | 生成 source map | true(開發(fā)) |
| declaration | 生成類型聲明 | true(庫項目) |
| removeComments | 移除注釋 | true |
| noEmit | 不生成文件 | true(僅檢查) |
| watch | 監(jiān)聽變化 | true(開發(fā)) |
九、總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
JS?生態(tài)系統(tǒng)加速Polyfill函數(shù)使用實例探索
這篇文章主要介紹了JS?生態(tài)系統(tǒng)加速Polyfill函數(shù)使用實例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01
詳解bootstrap的modal-remote兩種加載方式【強化】
本篇文章主要介紹了詳解bootstrap的modal-remote兩種加載方式【強化】,具有一定的參考價值,有興趣的可以了解一下。2017-01-01

