最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TypeScript編譯選項的使用小結(jié)

 更新時間:2026年06月07日 09:45:54   作者:咖啡の貓  
本文主要介紹了TypeScript編譯選項的使用小結(jié),詳細(xì)解析tsconfig.json核心配置,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、前言

你是否曾面對一個龐大的 tsconfig.json 文件感到無從下手?
是否因為配置不當(dāng)導(dǎo)致:

  • 編譯后的代碼在低版本瀏覽器報錯?
  • 類型檢查形同虛設(shè),any 隨處可見?
  • 模塊導(dǎo)入方式混亂(ESM vs CommonJS)?
  • 構(gòu)建速度慢如蝸牛?

其實,這些問題的根源往往在于 TypeScript 編譯選項(Compiler Options) 配置不當(dāng)。

本文將帶你: ? 系統(tǒng)掌握 tsconfig.json核心配置項
? 理解每個選項的作用、取值與影響
? 學(xué)會為前端、Node.js、庫開發(fā)等場景定制配置
? 掌握嚴(yán)格模式(strict) 的真正價值
? 避開常見配置陷阱,提升開發(fā)體驗與代碼質(zhì)量

?? 提示:本文基于 TypeScript 5.x,所有配置均經(jīng)過實戰(zhàn)驗證。

二、tsconfig.json是什么?

tsconfig.json 是 TypeScript 項目的配置文件,用于指定:

  • 編譯器如何將 .ts 轉(zhuǎn)為 .js
  • 哪些文件需要編譯
  • 啟用哪些類型檢查規(guī)則

自動生成配置

npx tsc --init

該命令會生成一個帶完整注釋的 tsconfig.json,包含所有選項說明。

三、核心編譯選項詳解(必知必會)

1.target—— 編譯目標(biāo) JavaScript 版本

作用:決定生成的 JS 語法兼容性。

{
  "compilerOptions": {
    "target": "ES2020"
  }
}
取值生成的 JS 特性
"ES5"兼容 IE,無 let/const、箭頭函數(shù)等
"ES2015" (ES6)支持 class、模塊、Promise
"ES2020"支持可選鏈 ?.、空值合并 ??
"ESNext"使用最新提案(不推薦生產(chǎn)使用)

? 建議

  • 前端項目:根據(jù) browserslist 選擇(如 "ES2020"
  • Node.js 項目:根據(jù) Node 版本選擇(Node 18+ 可用 "ES2022"

2.module—— 模塊系統(tǒng)

作用:控制 import/export 的編譯輸出格式。

{
  "module": "commonjs"   // Node.js 默認(rèn)
}
取值適用場景
"commonjs"Node.js(.js 文件使用 require/module.exports)
"ESNext" / "ES2020"現(xiàn)代前端(Vite、Webpack、Rollup)
"AMD" / "UMD"老舊打包工具(已少用)

?? 重要:

  • 瀏覽器項目 → 用 "ESNext"
  • Node.js 項目 → 用 "commonjs"(或 "node16" 啟用原生 ESM)

3.outDir與rootDir—— 輸入輸出目錄

{
  "rootDir": "./src",
  "outDir": "./dist"
}
  • rootDir:源碼根目錄(默認(rèn)為包含 tsconfig.json 的目錄)
  • outDir:編譯后 JS 輸出目錄

? 效果:
src/utils/helper.ts → dist/utils/helper.js

?? 若不設(shè)置 rootDir,TS 會以最長公共路徑為根,可能導(dǎo)致目錄結(jié)構(gòu)混亂。

4.strict—— 嚴(yán)格模式(TS 的靈魂?。?/h3>
{
  "strict": true
}

開啟后,自動啟用以下關(guān)鍵檢查:

  • strictNullChecks:禁止隱式 null/undefined
  • noImplicitAny:禁止隱式 any
  • strictFunctionTypes:函數(shù)參數(shù)更嚴(yán)格檢查
  • alwaysStrict:自動添加 "use strict"

? 強(qiáng)烈建議始終開啟 strict: true!
這是 TypeScript 發(fā)揮最大價值的前提。

?? 數(shù)據(jù):開啟 strict 可減少 30%+ 的運(yùn)行時錯誤(微軟內(nèi)部統(tǒng)計)

5.esModuleInterop—— 模塊互操作

{
  "esModuleInterop": true
}

解決痛點:CommonJS 與 ES Module 混用時的導(dǎo)入問題。

例如,無需再寫:

// ? 丑陋且易錯
import * as React from 'react';

而是可以:

// ? 簡潔自然
import React from 'react';

? 建議始終設(shè)為 true(Create React App、Vite 等腳手架默認(rèn)開啟)

6.skipLibCheck—— 跳過聲明文件檢查

{
  "skipLibCheck": true
}

作用:跳過 node_modules.d.ts 文件的類型檢查。

? 優(yōu)勢

  • 顯著加快編譯速度(尤其大型項目)
  • 避免第三方庫類型錯誤阻塞構(gòu)建

?? 注意:不會影響你自己的代碼類型檢查!

7.sourceMap—— 生成 Source Map

{
  "sourceMap": true
}

作用:生成 .js.map 文件,支持在瀏覽器或調(diào)試器中直接調(diào)試 TS 源碼。

? 開發(fā)環(huán)境必須開啟!
? 生產(chǎn)環(huán)境可關(guān)閉以減小體積。

四、其他實用選項

選項作用推薦值
declaration生成 .d.ts 聲明文件庫開發(fā)設(shè)為 true
removeComments移除 JS 注釋生產(chǎn)環(huán)境 true
noEmitOnError類型錯誤時不輸出 JStrue(避免污染 dist)
resolveJsonModule支持 import data from './data.json'按需開啟
allowSyntheticDefaultImports允許對無默認(rèn)導(dǎo)出的模塊使用 default 導(dǎo)入通常與 esModuleInterop 配合

五、不同場景下的配置模板

場景 1:Node.js 后端(CommonJS)

{
  "compilerOptions": {
    "target": "ES2021",
    "module": "commonjs",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "sourceMap": true,
    "noEmitOnError": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}

場景 2:前端應(yīng)用(Vite / Webpack)

{
  "compilerAssistant": {
    "target": "ES2020",
    "module": "ESNext",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "jsx": "react-jsx",       // React 項目需開啟
    "esModuleInterop": true,
    "skipLibCheck": true,
    "sourceMap": true
  },
  "include": ["src/**/*"]
}

?? 前端項目通常由構(gòu)建工具(如 Vite)處理 TS,outDir 可能被忽略,但類型檢查仍依賴此配置。

場景 3:發(fā)布 NPM 包(需生成聲明文件)

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "ESNext",
    "declaration": true,      // ? 生成 .d.ts
    "declarationDir": "./types",
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true
  }
}

六、常見配置陷阱與解決方案

? 陷阱 1:未開啟strict,導(dǎo)致any泛濫

現(xiàn)象:函數(shù)參數(shù)無類型,TS 不報錯
解決:立即開啟 "strict": true

? 陷阱 2:module與構(gòu)建工具不匹配

現(xiàn)象:Vite 項目設(shè) module: "commonjs" → 報錯
解決:前端用 "ESNext",Node.js 用 "commonjs" 或 "node16"

? 陷阱 3:忘記include,導(dǎo)致文件未被編譯

現(xiàn)象:新增 .ts 文件,但未生成 .js
解決:檢查 include 是否覆蓋新目錄

? 陷阱 4:在tsconfig.json中使用注釋(JSON 不支持?。?/h3>

現(xiàn)象:VS Code 報錯
解決:使用 .jsonc 擴(kuò)展名,或移除注釋(標(biāo)準(zhǔn) JSON 不允許注釋)

? 替代方案:用 // tsconfig.json 文件 + VS Code 的 JSON with Comments 支持

七、高級技巧:多配置文件與繼承

大型項目可拆分配置:

tsconfig.base.json     # 基礎(chǔ)配置
tsconfig.node.json     # Node.js 專用
tsconfig.web.json      # 前端專用

通過 extends 繼承:

// tsconfig.node.json
{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "module": "commonjs"
  }
}

? 優(yōu)勢:避免重復(fù)配置,統(tǒng)一團(tuán)隊規(guī)范。

八、結(jié)語

到此這篇關(guān)于TypeScript編譯選項的使用小結(jié)的文章就介紹到這了,更多相關(guān)TypeScript編譯選項內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 信息滾動效果的實例講解

    信息滾動效果的實例講解

    下面小編就為大家?guī)硪黄畔L動效果的實例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Bootstrap源碼解讀表單(2)

    Bootstrap源碼解讀表單(2)

    這篇文章主要源碼解讀了Bootstrap表單,介紹了Bootstrap各式各樣的表單,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • bootstrap fileinput插件實現(xiàn)預(yù)覽上傳照片功能

    bootstrap fileinput插件實現(xiàn)預(yù)覽上傳照片功能

    這篇文章主要介紹了bootstrap fileinput插件實現(xiàn)預(yù)覽上傳照片功能,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-01-01
  • JavaScript高級程序設(shè)計 DOM學(xué)習(xí)筆記

    JavaScript高級程序設(shè)計 DOM學(xué)習(xí)筆記

    DOM是針對XML和HTML文檔的一個API:即規(guī)定了實現(xiàn)文本節(jié)點操控的屬性、方法,具體實現(xiàn)由各自瀏覽器實現(xiàn)。
    2011-09-09
  • 前端防止表單重復(fù)提交的多種解決方案

    前端防止表單重復(fù)提交的多種解決方案

    表單重復(fù)提交是Web應(yīng)用中常見的問題,會導(dǎo)致數(shù)據(jù)重復(fù)、業(yè)務(wù)邏輯錯誤和糟糕的用戶體驗,本文將詳細(xì)介紹多種防止表單重復(fù)提交的技術(shù)方案,從基礎(chǔ)實現(xiàn)到高級防御策略,需要的朋友可以參考下
    2025-07-07
  • javascript表單是否為空驗證方法

    javascript表單是否為空驗證方法

    表單驗證在很多地方都可以用到,本文詳細(xì)的介紹了javascript表單是否為空驗證方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 前端如何寫一個大文件上傳組件詳細(xì)步驟

    前端如何寫一個大文件上傳組件詳細(xì)步驟

    在現(xiàn)代Web應(yīng)用中,大文件上傳是一個常見的需求,尤其是在云存儲、社交媒體和協(xié)作平臺等領(lǐng)域,這篇文章主要介紹了前端如何寫一個大文件上傳組件詳細(xì)步驟,需要的朋友可以參考下
    2025-04-04
  • js表單元素checked、radio被選中的幾種方法(詳解)

    js表單元素checked、radio被選中的幾種方法(詳解)

    下面小編就為大家?guī)硪黄猨s表單元素checked、radio被選中的幾種方法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • javascript textarea光標(biāo)定位方法(兼容IE和FF)

    javascript textarea光標(biāo)定位方法(兼容IE和FF)

    主要是實現(xiàn)textarea中光標(biāo)的定位方法,考慮到多瀏覽器的兼容性,需要的朋友可以參考下。
    2011-03-03
  • JS實現(xiàn)將鏈接生成二維碼并轉(zhuǎn)為圖片的方法

    JS實現(xiàn)將鏈接生成二維碼并轉(zhuǎn)為圖片的方法

    這篇文章主要介紹了JS實現(xiàn)將鏈接生成二維碼并轉(zhuǎn)為圖片的方法,涉及qrcodejs插件及js圖片生成相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03

最新評論

蓬莱市| 柳林县| 铅山县| 大英县| 侯马市| 绵竹市| 娄烦县| 汾阳市| 电白县| 辰溪县| 玉屏| 横峰县| 湾仔区| 舒城县| 汝阳县| 泰来县| 合作市| 理塘县| 福海县| 泗阳县| 仪陇县| 肥乡县| 乌鲁木齐县| 泗阳县| 东乡族自治县| 垣曲县| 文安县| 中宁县| 板桥市| 延长县| 旬邑县| 民县| 旌德县| 巩留县| 特克斯县| 赤城县| 普兰县| 康马县| 察雅县| 虎林市| 衡阳县|