Slovenčina

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

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.