tsconfig介紹


"compilerOptions": {

  "incremental": true, // TS編譯器在第一次編譯之后會(huì)生成一個(gè)存儲(chǔ)編譯信息的文件,第二次編譯會(huì)在第一次的基礎(chǔ)上進(jìn)行增量編譯,可以提高編譯的速度

  "tsBuildInfoFile": "./buildFile", // 增量編譯文件的存儲(chǔ)位置

  "diagnostics": true, // 打印診斷信息

  "target": "ES5", // 目標(biāo)語(yǔ)言的版本

  "module": "CommonJS", // 生成代碼的模板標(biāo)準(zhǔn)

  "outFile": "./app.js", // 將多個(gè)相互依賴的文件生成一個(gè)文件,可以用在AMD模塊中,即開啟時(shí)應(yīng)設(shè)置"module": "AMD",

  "lib": ["DOM", "ES2015", "ScriptHost", "ES2019.Array"], // TS需要引用的庫(kù),即聲明文件,es5 默認(rèn)引用dom、es5、scripthost,如需要使用es的高級(jí)版本特性,通常都需要配置,如es8的數(shù)組新特性需要引入"ES2019.Array",

  "allowJS": true, // 允許編譯器編譯JS,JSX文件

  "checkJs": true, // 允許在JS文件中報(bào)錯(cuò),通常與allowJS一起使用

  "outDir": "./dist", // 指定輸出目錄

  "rootDir": "./", // 指定輸出文件目錄(用于輸出),用于控制輸出目錄結(jié)構(gòu)

  "declaration": true, // 生成聲明文件,開啟后會(huì)自動(dòng)生成聲明文件

  "declarationDir": "./file", // 指定生成聲明文件存放目錄

  "emitDeclarationOnly": true, // 只生成聲明文件,而不會(huì)生成js文件

  "sourceMap": true, // 生成目標(biāo)文件的sourceMap文件

  "inlineSourceMap": true, // 生成目標(biāo)文件的inline SourceMap,inline SourceMap會(huì)包含在生成的js文件中

  "declarationMap": true, // 為聲明文件生成sourceMap

  "typeRoots": [], // 聲明文件目錄,默認(rèn)時(shí)node_modules/@types

  "types": [], // 加載的聲明文件包

  "removeComments":true, // 刪除注釋

  "noEmit": true, // 不輸出文件,即編譯后不會(huì)生成任何js文件

  "noEmitOnError": true, // 發(fā)送錯(cuò)誤時(shí)不輸出任何文件

  "noEmitHelpers": true, // 不生成helper函數(shù),減小體積,需要額外安裝,常配合importHelpers一起使用

  "importHelpers": true, // 通過(guò)tslib引入helper函數(shù),文件必須是模塊

  "downlevelIteration": true, // 降級(jí)遍歷器實(shí)現(xiàn),如果目標(biāo)源是es3/5,那么遍歷器會(huì)有降級(jí)的實(shí)現(xiàn)

  "strict": true, // 開啟所有嚴(yán)格的類型檢查

  "jsx": "preserve", // 指定 jsx 格式

  "alwaysStrict": true, // 在代碼中注入'use strict'

  "noImplicitAny": true, // 不允許隱式的any類型

  "strictNullChecks": true, // 不允許把null、undefined賦值給其他類型的變量

  "strictFunctionTypes": true, // 不允許函數(shù)參數(shù)雙向協(xié)變

  "strictPropertyInitialization": true, // 類的實(shí)例屬性必須初始化

  "strictBindCallApply": true, // 嚴(yán)格的bind/call/apply檢查

  "noImplicitThis": true, // 不允許this有隱式的any類型

  "noUnusedLocals": true, // 檢查只聲明、未使用的局部變量(只提示不報(bào)錯(cuò))

  "noUnusedParameters": true, // 檢查未使用的函數(shù)參數(shù)(只提示不報(bào)錯(cuò))

  "noFallthroughCasesInSwitch": true, // 防止switch語(yǔ)句貫穿(即如果沒(méi)有break語(yǔ)句后面不會(huì)執(zhí)行)

  "noImplicitReturns": true, //每個(gè)分支都會(huì)有返回值

  "esModuleInterop": true, // 允許export=導(dǎo)出,由import from 導(dǎo)入

  "allowUmdGlobalAccess": true, // 允許在模塊中全局變量的方式訪問(wèn)umd模塊

  "moduleResolution": "node", // 模塊解析策略,ts默認(rèn)用node的解析策略,即相對(duì)的方式導(dǎo)入

  "baseUrl": "./", // 解析非相對(duì)模塊的基地址,默認(rèn)是當(dāng)前目錄

  "paths": { // 路徑映射,相對(duì)于baseUrl

    // 如使用jq時(shí)不想使用默認(rèn)版本,而需要手動(dòng)指定版本,可進(jìn)行如下配置

    "jquery": ["node_modules/jquery/dist/jquery.min.js"]

  },

  "rootDirs": ["src","out"], // 將多個(gè)目錄放在一個(gè)虛擬目錄下,用于運(yùn)行時(shí),即編譯后引入文件的位置可能發(fā)生變化,這也設(shè)置可以虛擬src和out在同一個(gè)目錄下,不用再去改變路徑也不會(huì)報(bào)錯(cuò)

  "listEmittedFiles": true, // 打印輸出文件

  "listFiles": true// 打印編譯的文件(包括引用的聲明文件)

}

tsconfig.json文件是 TypeScript 編譯器的配置文件,TypeScript 編譯器可以根據(jù)它的規(guī)則來(lái)對(duì)代碼進(jìn)行編譯。

根選項(xiàng)

include:指定被編譯文件所在的目錄。

exclude:指定不需要被編譯的目錄。

extends:指定要繼承的配置文件。

files:指定被編譯的文件。

references:項(xiàng)目引用,是 TS 3.0 中的一項(xiàng)新功能,它允許將 TS 程序組織成更小的部分。

使用小技巧:在填寫路徑時(shí) ** 表示任意目錄, * 表示任意文件。

compilerOptions

定義項(xiàng)目的運(yùn)行時(shí)期望、JavaScript 的發(fā)出方式和位置以及與現(xiàn)有 JavaScript 代碼的集成級(jí)別。

項(xiàng)目選項(xiàng)

incremental:是否啟用增量編譯,指再次編譯時(shí)只編譯增加的內(nèi)容,默認(rèn):false。

target:指定ts編譯成ES的版本。

module:指定編譯后代碼使用的模塊化規(guī)范。

lib:指定項(xiàng)目運(yùn)行時(shí)使用的庫(kù)。

outDir:指定編譯后文件所在目錄。

outFile:將代碼編譯合并成一個(gè)文件,默認(rèn)將所有全局作用域中的代碼合并成一個(gè)文件。

rootDir:指定輸入文件的根目錄,默認(rèn)情況下當(dāng)前的項(xiàng)目目錄為根目錄。

allowJs:是否對(duì)js文件進(jìn)行編譯,默認(rèn):false。

checkJs:是否檢查js代碼是否符合語(yǔ)法規(guī)范,當(dāng)使用checkJs,必須使用allowJs,默認(rèn):false。

removeComments:是否移除注釋,默認(rèn):false

noEmit:不生成編譯后的文件,默認(rèn):false。

jsx:指定JSX代碼生成用于的開發(fā)環(huán)境。

plugins:在編輯器中運(yùn)行的語(yǔ)言服務(wù)插件列表。

declaration:是否生成相應(yīng)的 .d.ts 聲明文件,默認(rèn):false。

declarationMap:是否為每個(gè)對(duì)應(yīng)的 .d.ts 文件生成一個(gè) Map 文件,使用該功能時(shí),需要declaration或composite配合一起使用,默認(rèn):false。

sourceMap:是否生成相應(yīng)的Map映射的文件,默認(rèn):false。

composite:是否開啟項(xiàng)目編譯,開啟該功能,將會(huì)生成被編譯文件所在的目錄,同時(shí)開啟declaration、declarationMap和incremental,默認(rèn):false。

tsBuildInfoFile:指定增量編譯信息文件的位置,使用該功能時(shí),必須開啟incremental選項(xiàng)。

importHelpers:是否將輔助函數(shù)從 tslib 模塊導(dǎo)入,默認(rèn):false。

downlevelIteration:是否用于轉(zhuǎn)換為舊版本的 JS 提供可迭代對(duì)象的全面支持,默認(rèn):false。

isolatedModules:是否將每個(gè)文件轉(zhuǎn)換為單獨(dú)的模塊,默認(rèn):false。

嚴(yán)格檢查

strict:是否啟動(dòng)所有嚴(yán)格檢查的總開關(guān),默認(rèn):false,啟動(dòng)后將開啟所有的嚴(yán)格檢查選項(xiàng)。

alwaysStrict:是否以嚴(yán)格模式解析,并為每個(gè)源文件發(fā)出"use strict",默認(rèn):false。

noImplicitAny:是否禁止隱式的any類型,默認(rèn):false。

noImplicitThis:是否禁止不明確類型的this,默認(rèn):false。

strictNullChecks:是否啟用嚴(yán)格的空檢查,默認(rèn):false。

strictBindCallApply:是否在函數(shù)上啟用嚴(yán)格的’bind’, 'call’和’apply’方法,默認(rèn):false。

strictFunctionTypes:是否啟用對(duì)函數(shù)類型的嚴(yán)格檢查,默認(rèn):false。

strictPropertyInitialization:是否啟用嚴(yán)格檢查類的屬性初始化,默認(rèn):false。

模塊解析選項(xiàng)

moduleResolution:指定模塊解析策略,node或classic

baseUrl:用于解析非絕對(duì)模塊名的基本目錄,相對(duì)模塊不受影響。

paths:用于設(shè)置模塊名稱基于baseUrl的路徑映射關(guān)系。

rootDirs:將多個(gè)目錄放在一個(gè)虛擬目錄下,運(yùn)行編譯后文件引入的位置發(fā)生改變,也不會(huì)報(bào)錯(cuò)。

typeRoots:指定聲明文件或文件夾的路徑列表

types:用來(lái)指定需要包含的模塊,并將其包含在全局范圍內(nèi)。

allowSyntheticDefaultImports:是否允許從沒(méi)有默認(rèn)導(dǎo)出的模塊中默認(rèn)導(dǎo)入,默認(rèn):false。

esModuleInterop:是否通過(guò)為所有導(dǎo)入模塊創(chuàng)建命名空間對(duì)象,允許CommonJS和ES模塊之間的互操作性,開啟改選項(xiàng)時(shí),也自動(dòng)開啟allowSyntheticDefaultImports選項(xiàng),默認(rèn):false。

preserveSymlinks:是否不解析符號(hào)鏈接的真實(shí)路徑,這是為了在 Node.js 中反映相同的標(biāo)志,默認(rèn):false。

allowUmdGlobalAccess:允許您從模塊文件內(nèi)部訪問(wèn)作為全局變量的 UMD 導(dǎo)出,如果不使用該選項(xiàng),從 UMD 模塊導(dǎo)出需要一個(gè)導(dǎo)入聲明,默認(rèn):false。

Map選項(xiàng)

sourceRoot:指定調(diào)試器應(yīng)定位 TypeScript 文件而不是相對(duì)源位置的位置。

mapRoot:指定調(diào)試器定位Map文件的位置,而不是生成的位置。

inlineSourceMap:是否將Map文件內(nèi)容嵌套到 JS 文件中,這會(huì)導(dǎo)致 JS 文件變大,但在某些情況下會(huì)很方便,默認(rèn):false。

inlineSources:是否將 .ts 文件的原始內(nèi)容作為嵌入字符串包含在 .map 文件中,默認(rèn):false。

附加檢查

noUnusedLocals:是否檢查未使用的局部變量,默認(rèn):false。

noUnusedParameters:是否檢查未使用的參數(shù),默認(rèn):false。

noImplicitReturns:檢查函數(shù)是否不含有隱式返回值,默認(rèn):false。

noImplicitOverride:是否檢查子類繼承自基類時(shí),其重載的函數(shù)命名與基類的函數(shù)不同步問(wèn)題,默認(rèn):false。

noFallthroughCasesInSwitch:檢查switch中是否含有case沒(méi)有使用break跳出,默認(rèn):false。

noUncheckedIndexedAccess:是否通過(guò)索引簽名來(lái)描述對(duì)象上有未知鍵但已知值的對(duì)象,默認(rèn):false。

noPropertyAccessFromIndexSignature:是否通過(guò)" . “(obj.key) 語(yǔ)法訪問(wèn)字段和"索引”( obj["key"]), 以及在類型中聲明屬性的方式之間的一致性,默認(rèn):false。

實(shí)驗(yàn)選項(xiàng)

experimentalDecorators:是否啟用對(duì)裝飾器的實(shí)驗(yàn)性支持,裝飾器是一種語(yǔ)言特性,還沒(méi)有完全被 JavaScript 規(guī)范批準(zhǔn),默認(rèn):false。

emitDecoratorMetadata:為裝飾器啟用對(duì)發(fā)出類型元數(shù)據(jù)的實(shí)驗(yàn)性支持,默認(rèn):false。

高級(jí)選項(xiàng)

allowUnreachableCode:是否允許無(wú)法訪問(wèn)的代碼(undefined / true / false),默認(rèn):undefined。

undefined:向編輯提供建議作為警告。

true:未使用的標(biāo)簽被忽略。

false:引發(fā)有關(guān)未使用標(biāo)簽的編譯器錯(cuò)誤。

allowUnusedLabels:是否允許未使用的標(biāo)簽(undefined / true / false),默認(rèn):undefined。

undefined:向編輯提供建議作為警告。

true:未使用的標(biāo)簽被忽略。

false:引發(fā)有關(guān)未使用標(biāo)簽的編譯器錯(cuò)誤。

assumeChangesOnlyAffectDirectDependencies是否避免重新檢查/重建所有真正可能受影響的文件,而只會(huì)重新檢查/重建已更改的文件以及直接導(dǎo)入它們的文件,默認(rèn):false。

charset:字符集(已棄用),默認(rèn):utf8

declarationDir:提供一種方法來(lái)配置發(fā)出聲明文件的根目錄。

diagnostics:用于輸出用于調(diào)試的診斷信息

disableReferencedProjectLoad:是否禁用所有可用項(xiàng)目加載到內(nèi)存中,默認(rèn):false。

disableSizeLimit:為了避免在處理非常大的 JS 項(xiàng)目時(shí)可能出現(xiàn)的內(nèi)存膨脹問(wèn)題,TS 將分配的內(nèi)存量有一個(gè)上限,默認(rèn):false。

disableSolutionSearching:在編輯器中搜索查找所有引用或跳轉(zhuǎn)到定義等功能時(shí),禁止包含復(fù)合項(xiàng)目,默認(rèn):false。

disableSourceOfProjectReferenceRedirect:是否禁用項(xiàng)目引用源重定向,默認(rèn):false。

emitBOM:控制TypeScript在寫輸出文件時(shí)是否發(fā)出字節(jié)順序標(biāo)記(BOM),默認(rèn):false。

emitDeclarationOnly:是否只發(fā)出.d.ts 文件,不發(fā)出.js 文件,使用該選項(xiàng)時(shí),需要配合 declaration 或 composite 一起使用,默認(rèn):false。

explainFiles:解釋文件,此選項(xiàng)用于調(diào)試文件如何成為編譯的一部分,默認(rèn):false。

extendedDiagnostics:是否查看 TS 在編譯時(shí)花費(fèi)的時(shí)間,默認(rèn):false。

forceConsistentCasingInFileNames:是否區(qū)分文件系統(tǒng)大小寫規(guī)則,默認(rèn):false。

generateCpuProfile:在編譯階段讓 TS 發(fā)出 CPU 配置文件,只能通過(guò)終端或 CLI 調(diào)用 --generateCpuProfile tsc-output.cpuprofile 。

importsNotUsedAsValues:此標(biāo)志控制如何 import 工作方式,有 3 個(gè)不同的選項(xiàng):remove、preserve 和 error 。

jsxFactory:當(dāng)使用經(jīng)典的JSX運(yùn)行時(shí)編譯JSX元素時(shí),更改.js文件中調(diào)用的函數(shù),默認(rèn):React.createElement 。

jsxFragmentFactory:指定 JSX 片段工廠函數(shù)在指定了 jsxFactory 編譯器選項(xiàng)的情況下針對(duì) react JSX 發(fā)出時(shí)使用。

jsxImportSource:當(dāng)在TS 4.1中使用 jsx 作為 react-jsx 或 react-jsxdev 時(shí),聲明用于導(dǎo)入jsx和jsxs工廠函數(shù)的模塊說(shuō)明符。

keyofStringsOnly:當(dāng)應(yīng)用具有字符串索引簽名的類型時(shí),此標(biāo)志將類型操作符的鍵值更改為返回 string 而不是string | number,已棄用,默認(rèn):false。

listEmittedFiles:是否將編譯部分生成的文件的名稱打印到終端,默認(rèn):false。

listFiles:是否打印編譯文件部分的名稱,默認(rèn):false。

maxNodeModuleJsDepth:在node_modules下搜索并加載JavaScript文件的最大依賴深度,默認(rèn):0 。

newLine:指定發(fā)出文件時(shí)要使用的換行規(guī)則,CRLF (dos) 或 LF (unix)。

noEmitHelpers:是否使用全局作用域助手函數(shù)提供實(shí)現(xiàn),并完全關(guān)閉助手函數(shù)的發(fā)出,而不是使用 importhelper 來(lái)導(dǎo)入助手函數(shù),默認(rèn):false。

noEmitOnError:有錯(cuò)誤時(shí)不進(jìn)行編譯,默認(rèn):false。

noErrorTruncation:是否禁止截?cái)噱e(cuò)誤消息,已棄用,默認(rèn):false。

noImplicitUseStrict:是否禁止無(wú)隱式嚴(yán)格模式,默認(rèn):false。

noLib:是否禁止自動(dòng)包含任何庫(kù)文件,默認(rèn):false。

noResolve:是否禁用析后的文件添加到程序中;默認(rèn)情況下,TS 會(huì)檢查 import 和 reference 指令的初始文件集,并將這些解析后的文件添加到你的程序中,默認(rèn):false。

noStrictGenericChecks:是否禁用嚴(yán)格的泛型檢查,默認(rèn):false。

out:該選項(xiàng)以不可預(yù)測(cè)或一致的方式計(jì)算最終文件位置,已棄用,

preserveConstEnums:是否禁止刪除枚舉常量生成代碼中的聲明,默認(rèn):false。

reactNamespace:React命名空間,使用 jsxFactory 來(lái)代替。

resolveJsonModule:是否解析 JSON 模塊,默認(rèn):false。

skipDefaultLibCheck:是否跳過(guò)默認(rèn)庫(kù)聲明文件的類型檢查,默認(rèn):false。

skipLibCheck:是否跳過(guò)聲明文件的類型檢查,這可以在編譯期間以犧牲類型系統(tǒng)準(zhǔn)確性為代價(jià)來(lái)節(jié)省時(shí)間,默認(rèn):false。

stripInternal:是否禁止 JSDoc 注釋中帶有@internal注釋的代碼發(fā)出聲明,默認(rèn):false。

suppressExcessPropertyErrors:是否禁用報(bào)告過(guò)多的屬性錯(cuò)誤,默認(rèn):false。

suppressImplicitAnyIndexErrors:是否抑制隱式any索引的錯(cuò)誤,默認(rèn):false。

traceResolution:當(dāng)嘗試調(diào)試未包含模塊的原因時(shí)。啟用該選項(xiàng)讓 TypeScript 打印有關(guān)每個(gè)處理文件的解析過(guò)程的信息,默認(rèn):false。

useDefineForClassFields:此標(biāo)志用作遷移到即將推出的類字段標(biāo)準(zhǔn)版本的一部分,默認(rèn):false。

命令行

preserveWatchOutput:是否在監(jiān)視模式下保留過(guò)時(shí)的控制臺(tái)輸出,而不是每次發(fā)生更改時(shí)都清除屏幕,默認(rèn):false。

pretty:是否使用顏色對(duì)上下文錯(cuò)誤和消息進(jìn)行樣式化,默認(rèn):true。

watchOptions

配置 TypeScript 的 --watch工作方式。

監(jiān)視選項(xiàng)

watchFile:監(jiān)視單個(gè)文件的策略,默認(rèn):useFsEvents

fixedPollingInterval:以固定時(shí)間間隔每秒多次檢查每個(gè)文件的更改。

priorityPollingInterval:每秒多次檢查每個(gè)文件的更改,但使用啟發(fā)式方法檢查某些類型的文件的頻率低于其他文件。

dynamicPriorityPolling:使用動(dòng)態(tài)隊(duì)列,其中不經(jīng)常修改的文件將不那么頻繁地檢查。

useFsEvents:嘗試使用操作系統(tǒng)/文件系統(tǒng)的本機(jī)事件進(jìn)行文件更改。

useFsEventsOnParentDirectory:嘗試使用操作系統(tǒng)/文件系統(tǒng)的本機(jī)事件來(lái)監(jiān)聽文件父目錄的變化。

watchDirectory:在缺乏遞歸文件監(jiān)視功能的系統(tǒng)下如何監(jiān)視整個(gè)目錄樹的策略,默認(rèn):useFsEvents

fixedPollingInterval:以固定時(shí)間間隔每秒多次檢查每個(gè)目錄的變化。

dynamicPriorityPolling:使用動(dòng)態(tài)隊(duì)列,其中不經(jīng)常修改的目錄將不那么頻繁地檢查。

useFsEvents:嘗試使用操作系統(tǒng)/文件系統(tǒng)的本機(jī)事件進(jìn)行目錄更改。

fallbackPolling:使用文件系統(tǒng)事件時(shí),此選項(xiàng)指定當(dāng)系統(tǒng)用完本機(jī)文件觀察器和/或不支持本機(jī)文件觀察器時(shí)使用的輪詢策略,默認(rèn):dynamicPriorityPolling

fixedPollingInterval:以固定時(shí)間間隔每秒多次檢查每個(gè)文件的更改。

priorityPollingInterval:每秒多次檢查每個(gè)文件的更改,但使用啟發(fā)式方法檢查某些類型的文件的頻率低于其他文件。

dynamicPriorityPolling:使用動(dòng)態(tài)隊(duì)列,其中不經(jīng)常修改的文件將不那么頻繁地檢查。

synchronousWatchDirectory:禁用對(duì)目錄的延遲監(jiān)視。

synchronousWatchDirectory:在本機(jī)不支持遞歸觀看的平臺(tái)上同步調(diào)用回調(diào),并更新目錄觀察者的狀態(tài),默認(rèn):false。

excludeDirectories:使用排除目錄來(lái)大幅減少 --watch 期間被監(jiān)視的文件數(shù)量.

excludeFiles:使用excludeFiles從被監(jiān)視的文件中刪除一組特定的文件。

typeAcquisition

類型獲取僅對(duì) JavaScript 項(xiàng)目很重要。

  1. 類型獲取

enable:提供在 JavaScript 項(xiàng)目中禁用類型獲取的配置,默認(rèn):false。

include:使用 include 來(lái)指定應(yīng)從絕對(duì)類型中使用哪些類型。

exclude:提供用于禁用 JavaScript 項(xiàng)目中某個(gè)模塊的類型獲取的配置

disableFilenameBasedTypeAcquisition:是否禁用基于文件名的類型獲取,TypeScript 的類型獲取可以根據(jù)項(xiàng)目中的文件名推斷應(yīng)該添加哪些類型,默認(rèn):false。

————————————————

版權(quán)聲明:本文為CSDN博主「oBoLuoMi1」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/oBoLuoMi1/article/details/121697267

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容