Ovládnite konfiguráciu TypeScriptu s týmto podrobným sprievodcom tsconfig.json. Naučte sa základné možnosti kompilátora, nastavenie projektu a pokročilé konfigurácie pre efektívny vývoj.
Konfigurácia TypeScriptu: Komplexný sprievodca súborom tsconfig.json
TypeScript, nadmnožina JavaScriptu, prináša statické typovanie do dynamického sveta webového vývoja. Dobre nakonfigurovaný súbor tsconfig.json
je kľúčový pre využitie plného potenciálu TypeScriptu. Tento sprievodca poskytuje komplexný prehľad súboru tsconfig.json
, pokrýva základné možnosti kompilátora, nastavenie projektu a pokročilé konfigurácie.
Čo je tsconfig.json?
Súbor tsconfig.json
je konfiguračný súbor, ktorý špecifikuje možnosti kompilátora pre projekt v TypeScript. Hovorí kompilátoru TypeScriptu, ako má transpilovať kód TypeScriptu do JavaScriptu. Tento súbor je nevyhnutný na definovanie štruktúry projektu, nastavenie pravidiel kompilácie a zabezpečenie konzistentnosti v rámci vývojárskeho tímu, či už sa tento tím nachádza v jednej kancelárii alebo je distribuovaný na viacerých kontinentoch.
Vytvorenie súboru tsconfig.json
Ak chcete vytvoriť súbor tsconfig.json
, prejdite do koreňového adresára vášho projektu v termináli a spustite nasledujúci príkaz:
tsc --init
Tento príkaz vygeneruje základný súbor tsconfig.json
s bežne používanými možnosťami kompilátora. Potom môžete súbor prispôsobiť špecifickým požiadavkám vášho projektu. Typický tsconfig.json
bude obsahovať možnosti ako compilerOptions
, include
a exclude
.
Základné možnosti kompilátora
Sekcia compilerOptions
je srdcom súboru tsconfig.json
. Obsahuje širokú škálu možností, ktoré riadia správanie kompilátora TypeScriptu. Tu sú niektoré z najdôležitejších možností kompilátora:
target
Možnosť target
špecifikuje cieľovú verziu ECMAScript pre generovaný JavaScriptový kód. Bežné hodnoty zahŕňajú ES5
, ES6
(ES2015), ES2016
, ES2017
, ES2018
, ES2019
, ES2020
, ES2021
, ES2022
, ESNext
. Výber správneho cieľa je kľúčový pre zabezpečenie kompatibility s určeným spúšťacím prostredím, ako sú prehliadače alebo verzie Node.js.
Príklad:
{
"compilerOptions": {
"target": "ES2020"
}
}
module
Možnosť module
špecifikuje štýl generovania kódu modulov. Bežné hodnoty zahŕňajú CommonJS
, AMD
, System
, UMD
, ES6
(ES2015), ES2020
a ESNext
. Voľba systému modulov závisí od cieľového prostredia a použitého nástroja na spájanie modulov (napr. Webpack, Rollup, Parcel). Pre Node.js sa často používa CommonJS
, zatiaľ čo pre moderné webové aplikácie sa uprednostňuje ES6
alebo ESNext
s nástrojom na spájanie modulov. Použitie ESNext
umožňuje vývojárom využívať najnovšie funkcie a optimalizácie, pričom sa spoliehajú na to, že nástroj na spájanie modulov sa postará o konečný formát modulu.
Príklad:
{
"compilerOptions": {
"module": "ESNext"
}
}
lib
Možnosť lib
špecifikuje zoznam súborov knižníc, ktoré sa majú zahrnúť do kompilácie. Tieto súbory knižníc poskytujú definície typov pre vstavané JavaScriptové API a API prehliadačov. Bežné hodnoty zahŕňajú ES5
, ES6
, ES2015
, ES2016
, ES2017
, ES2018
, ES2019
, ES2020
, ES2021
, ES2022
, ESNext
, DOM
, WebWorker
, ScriptHost
, ES2015.Core
, ES2015.Collection
, ES2015.Iterable
, ES2015.Promise
, ES2015.Proxy
, ES2015.Reflect
, ES2015.Generator
, ES2015.Symbol
, ES2015.Symbol.WellKnown
, ES2016.Array.Include
, ES2017.object
, ES2017.Intl
, ES2017.SharedMemory
, ES2017.String
, ES2017.TypedArrays
, ES2018.Intl
, ES2018.Promise
, ES2018.RegExp
, ES2019.Array
, ES2019.Object
, ES2019.String
, ES2019.Symbol
, ES2020.BigInt
, ES2020.Promise
, ES2020.String
, ES2020.Symbol.WellKnown
, ES2021.Promise
, ES2021.String
, ES2021.WeakRef
, ES2022.Error
, ES2022.Object
, ES2022.String
a mnoho ďalších. Výber vhodných knižníc zabezpečuje, že kompilátor TypeScriptu má potrebné informácie o typoch pre cieľové prostredie. Použitie knižnice DOM umožňuje projektu kompilovať kód, ktorý používa API špecifické pre prehliadač, bez chýb typov.
Príklad:
{
"compilerOptions": {
"lib": ["ES2020", "DOM"]
}
}
allowJs
Možnosť allowJs
umožňuje kompilátoru TypeScriptu kompilovať JavaScriptové súbory spolu so súbormi TypeScript. To je užitočné pri inkrementálnej migrácii existujúcich JavaScriptových projektov na TypeScript. Nastavenie tejto možnosti na true
umožní kompilátoru spracovávať súbory .js
, čo umožňuje postupné prijímanie TypeScriptu v rámci projektu.
Príklad:
{
"compilerOptions": {
"allowJs": true
}
}
jsx
Možnosť jsx
špecifikuje, ako sa má zaobchádzať so syntaxou JSX. Bežné hodnoty zahŕňajú preserve
, react
, react-native
a react-jsx
. preserve
zachováva syntax JSX vo výstupe, zatiaľ čo react
transformuje JSX na volania React.createElement. react-jsx
používa novú transformáciu JSX zavedenú v React 17, ktorá nevyžaduje importovanie Reactu. Výber správnej možnosti JSX je kľúčový pre projekty používajúce React alebo iné knižnice založené na JSX.
Príklad:
{
"compilerOptions": {
"jsx": "react-jsx"
}
}
declaration
Možnosť declaration
generuje zodpovedajúce deklaračné súbory .d.ts
pre každý súbor TypeScript. Deklaračné súbory obsahujú informácie o typoch a používajú ich iné projekty v TypeScript na použitie skompilovaného kódu. Generovanie deklaračných súborov je nevyhnutné pre vytváranie znovupoužiteľných knižníc a modulov. Tieto súbory umožňujú iným projektom v TypeScript pochopiť typy a rozhrania vystavené knižnicou bez potreby kompilovať pôvodný zdrojový kód.
Príklad:
{
"compilerOptions": {
"declaration": true
}
}
sourceMap
Možnosť sourceMap
generuje súbory zdrojových máp, ktoré mapujú generovaný JavaScriptový kód späť na pôvodný kód TypeScript. Zdrojové mapy sú nevyhnutné pre ladenie kódu TypeScript v prehliadačoch a iných prostrediach. Keď nastane chyba v JavaScriptovom kóde, zdrojová mapa umožňuje vývojárovi vidieť zodpovedajúci kód TypeScript v debuggeri, čo uľahčuje identifikáciu a opravu problému.
Príklad:
{
"compilerOptions": {
"sourceMap": true
}
}
outDir
Možnosť outDir
špecifikuje výstupný adresár pre generované JavaScriptové súbory. Táto možnosť pomáha organizovať výstup zostavenia projektu oddelením zdrojového kódu od skompilovaného kódu. Použitie outDir
uľahčuje správu procesu zostavenia a nasadenie aplikácie.
Príklad:
{
"compilerOptions": {
"outDir": "dist"
}
}
rootDir
Možnosť rootDir
špecifikuje koreňový adresár projektu v TypeScript. Kompilátor používa tento adresár ako základ pre riešenie názvov modulov. Táto možnosť je obzvlášť dôležitá pre projekty so zložitou štruktúrou adresárov. Správne nastavenie rootDir
zabezpečuje, že kompilátor dokáže nájsť všetky potrebné moduly a závislosti.
Príklad:
{
"compilerOptions": {
"rootDir": "src"
}
}
strict
Možnosť strict
zapína všetky možnosti prísnej kontroly typov. Je to vysoko odporúčané pre nové projekty v TypeScript, pretože pomáha odhaliť potenciálne chyby včas v procese vývoja. Zapnutie prísneho režimu presadzuje prísnejšie pravidlá kontroly typov, čo vedie k robustnejšiemu a udržateľnejšiemu kódu. Je osvedčeným postupom zapnúť prísny režim vo všetkých nových projektoch v TypeScript.
Príklad:
{
"compilerOptions": {
"strict": true
}
}
esModuleInterop
Možnosť esModuleInterop
umožňuje interoperabilitu medzi modulmi CommonJS a ES. Je to dôležité pre projekty, ktoré používajú oba typy modulov. Keď je esModuleInterop
zapnuté, TypeScript automaticky zvládne rozdiely medzi modulmi CommonJS a ES, čo uľahčuje import a export modulov medzi týmito dvoma systémami. Táto možnosť je obzvlášť užitočná pri práci s knižnicami tretích strán, ktoré môžu používať rôzne systémy modulov.
Príklad:
{
"compilerOptions": {
"esModuleInterop": true
}
}
moduleResolution
Možnosť moduleResolution
špecifikuje, ako TypeScript rieši importy modulov. Bežné hodnoty zahŕňajú Node
a Classic
. Stratégia riešenia modulov Node
je predvolená a je založená na algoritme riešenia modulov v Node.js. Stratégia riešenia modulov Classic
je staršia a menej používaná. Použitie stratégie riešenia modulov Node
zabezpečuje, že TypeScript dokáže správne riešiť importy modulov v prostredí Node.js.
Príklad:
{
"compilerOptions": {
"moduleResolution": "Node"
}
}
baseUrl
a paths
Možnosti baseUrl
a paths
sa používajú na konfiguráciu riešenia modulov pre ne-relatívne importy modulov. Možnosť baseUrl
špecifikuje základný adresár na riešenie ne-relatívnych názvov modulov. Možnosť paths
umožňuje mapovať názvy modulov na konkrétne umiestnenia v súborovom systéme. Tieto možnosti sú obzvlášť užitočné pre projekty so zložitou štruktúrou adresárov a na zjednodušenie importov modulov. Použitie baseUrl
a paths
môže urobiť kód čitateľnejším a udržateľnejším.
Príklad:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@components/*": ["src/components/*"],
"@utils/*": ["src/utils/*"]
}
}
}
Možnosti Include a Exclude
Možnosti include
a exclude
špecifikujú, ktoré súbory sa majú zahrnúť do kompilácie a ktoré súbory sa majú vylúčiť. Tieto možnosti používajú glob vzory na porovnávanie názvov súborov. Použitie include
a exclude
vám umožňuje kontrolovať, ktoré súbory spracováva kompilátor TypeScriptu, čím sa zlepšuje výkonnosť zostavenia a znižujú sa chyby. Je osvedčeným postupom explicitne špecifikovať súbory, ktoré sa majú zahrnúť do kompilácie.
Príklad:
{
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
Možnosť Extends
Možnosť extends
umožňuje dediť možnosti kompilátora z iného súboru tsconfig.json
. Je to užitočné na zdieľanie spoločných konfiguračných nastavení medzi viacerými projektmi alebo na vytváranie základných konfigurácií. Použitie možnosti extends
podporuje znovupoužitie kódu a znižuje duplicitu. Je osvedčeným postupom vytvárať základné konfigurácie a rozširovať ich v jednotlivých projektoch.
Príklad:
{
"extends": "./tsconfig.base.json",
"compilerOptions": {
"jsx": "react-jsx"
},
"include": ["src/**/*"]
}
Pokročilé konfigurácie
Okrem základných možností kompilátora podporuje tsconfig.json
aj pokročilé konfigurácie pre špecializované scenáre.
Inkrementálna kompilácia
Pre veľké projekty môže inkrementálna kompilácia výrazne zlepšiť časy zostavenia. TypeScript si môže ukladať do medzipamäte výsledky predchádzajúcich kompilácií a prekompilovať iba súbory, ktoré sa zmenili. Povolenie inkrementálnej kompilácie môže dramaticky skrátiť časy zostavenia pre veľké projekty. Je to obzvlášť dôležité pre projekty s veľkým počtom súborov a závislostí.
{
"compilerOptions": {
"incremental": true,
"tsBuildInfoFile": ".tsbuildinfo"
}
}
Referencie na projekty
Referencie na projekty vám umožňujú štruktúrovať veľké projekty v TypeScript do menších, nezávislých modulov. To môže zlepšiť časy zostavenia a organizáciu kódu. Použitie referencií na projekty môže urobiť veľké projekty spravovateľnejšími a ľahšie udržiavateľnými. Je osvedčeným postupom používať referencie na projekty pre veľké a zložité projekty.
{
"compilerOptions": {
"composite": true
},
"references": [
{ "path": "./module1" },
{ "path": "./module2" }
]
}
Vlastné definície typov
Niekedy budete potrebovať poskytnúť definície typov pre JavaScriptové knižnice, ktoré ich nemajú. Môžete vytvoriť vlastné súbory .d.ts
na definovanie typov pre tieto knižnice. Vytváranie vlastných definícií typov vám umožňuje používať JavaScriptové knižnice vo vašom kóde v TypeScript bez obetovania typovej bezpečnosti. Je to obzvlášť užitočné pri práci so starším JavaScriptovým kódom alebo knižnicami, ktoré neposkytujú vlastné definície typov.
// custom.d.ts
declare module 'my-library' {
export function doSomething(x: number): string;
}
Osvedčené postupy
- Používajte prísny režim (Strict Mode): Povoľte možnosť
strict
pre rozšírenú kontrolu typov. - Špecifikujte cieľ (Target): Zvoľte vhodnú verziu
target
pre vaše spúšťacie prostredie. - Organizujte výstup: Použite
outDir
na oddelenie zdrojového kódu od skompilovaného kódu. - Spravujte závislosti: Použite
include
aexclude
na kontrolu, ktoré súbory sa kompilujú. - Využívajte Extends: Zdieľajte spoločné konfiguračné nastavenia pomocou možnosti
extends
. - Ukladajte konfiguráciu do systému na správu verzií: Commitnite súbor `tsconfig.json` do Gitu, aby ste udržali konzistentnosť medzi vývojárskymi prostrediami a CI/CD pipeline.
Riešenie bežných problémov
Konfigurácia tsconfig.json
môže byť niekedy náročná. Tu sú niektoré bežné problémy a ich riešenia:
Problémy s riešením modulov
Ak narazíte na chyby pri riešení modulov, uistite sa, že možnosť moduleResolution
je správne nakonfigurovaná a že možnosti baseUrl
a paths
sú správne nastavené. Dvakrát skontrolujte cesty špecifikované v možnosti paths
, aby ste sa uistili, že sú správne. Overte, či sú všetky potrebné moduly nainštalované v adresári node_modules
.
Chyby typov
Chyby typov sa môžu vyskytnúť, ak sú definície typov nesprávne alebo chýbajú. Uistite sa, že máte nainštalované správne definície typov pre všetky knižnice, ktoré používate. Ak používate JavaScriptovú knižnicu, ktorá nemá definície typov, zvážte vytvorenie vlastných definícií typov.
Chyby kompilácie
Chyby kompilácie sa môžu vyskytnúť, ak sa vo vašom kóde v TypeScript nachádzajú syntaktické chyby alebo chyby typov. Dôkladne si prečítajte chybové hlásenia a opravte všetky syntaktické chyby alebo chyby typov. Uistite sa, že váš kód dodržiava kódovacie konvencie TypeScriptu.
Záver
Dobre nakonfigurovaný súbor tsconfig.json
je nevyhnutný pre úspešný projekt v TypeScript. Porozumením základných možností kompilátora a pokročilých konfigurácií môžete optimalizovať svoj vývojový proces, zlepšiť kvalitu kódu a zabezpečiť kompatibilitu s cieľovým prostredím. Investovanie času do správnej konfigurácie tsconfig.json
sa z dlhodobého hľadiska oplatí znížením počtu chýb, zlepšením udržateľnosti a zefektívnením procesu zostavenia. To vedie k efektívnejšiemu a spoľahlivejšiemu vývoju softvéru. Informácie poskytnuté v tomto článku sú navrhnuté tak, aby boli univerzálne použiteľné a mali by poskytnúť pevný základ pre začatie nového projektu s TypeScriptom.
Nezabudnite nahliadnuť do oficiálnej dokumentácie TypeScriptu pre najaktuálnejšie informácie a podrobné vysvetlenia všetkých dostupných možností kompilátora. Dokumentácia TypeScriptu je cenným zdrojom pre pochopenie zložitostí konfigurácie TypeScriptu.