Čeština

Ovládněte konfiguraci TypeScriptu s tímto podrobným průvodcem tsconfig.json. Naučte se základní možnosti kompilátoru, nastavení projektu a pokročilé konfigurace pro efektivní vývoj.

Konfigurace TypeScriptu: Komplexní průvodce souborem tsconfig.json

TypeScript, nadmnožina JavaScriptu, přináší statické typování do dynamického světa webového vývoje. Správně nakonfigurovaný soubor tsconfig.json je klíčový pro využití plného potenciálu TypeScriptu. Tento průvodce poskytuje komplexní přehled souboru tsconfig.json, zahrnující základní možnosti kompilátoru, nastavení projektu a pokročilé konfigurace.

Co je to tsconfig.json?

Soubor tsconfig.json je konfigurační soubor, který specifikuje možnosti kompilátoru pro projekt v TypeScriptu. Říká kompilátoru TypeScriptu, jak má transpikovat kód TypeScriptu do JavaScriptu. Tento soubor je nezbytný pro definování struktury projektu, nastavení pravidel kompilace a zajištění konzistence napříč vývojovým týmem, ať už se tento tým nachází v jedné kanceláři nebo je rozdělen na několika kontinentech.

Vytvoření souboru tsconfig.json

Pro vytvoření souboru tsconfig.json přejděte v terminálu do kořenového adresáře vašeho projektu a spusťte následující příkaz:

tsc --init

Tento příkaz vygeneruje základní soubor tsconfig.json s běžně používanými možnostmi kompilátoru. Soubor si pak můžete přizpůsobit specifickým požadavkům vašeho projektu. Typický tsconfig.json bude obsahovat možnosti jako compilerOptions, include a exclude.

Základní možnosti kompilátoru

Sekce compilerOptions je srdcem souboru tsconfig.json. Obsahuje širokou škálu možností, které řídí chování kompilátoru TypeScriptu. Zde jsou některé z nejdůležitějších možností kompilátoru:

target

Možnost target specifikuje cílovou verzi ECMAScriptu pro generovaný JavaScriptový kód. Mezi běžné hodnoty patří ES5, ES6 (ES2015), ES2016, ES2017, ES2018, ES2019, ES2020, ES2021, ES2022, ESNext. Výběr správného cíle je zásadní pro zajištění kompatibility s cílovým běhovým prostředím, jako jsou prohlížeče nebo verze Node.js.

Příklad:

{
  "compilerOptions": {
    "target": "ES2020"
  }
}

module

Možnost module specifikuje styl generování kódu modulů. Mezi běžné hodnoty patří CommonJS, AMD, System, UMD, ES6 (ES2015), ES2020 a ESNext. Volba modulového systému závisí na cílovém prostředí a použitém nástroji pro sdružování modulů (např. Webpack, Rollup, Parcel). Pro Node.js se často používá CommonJS, zatímco pro moderní webové aplikace je preferován ES6 nebo ESNext s nástrojem pro sdružování modulů. Použití ESNext umožňuje vývojářům využívat nejnovější funkce a optimalizace, přičemž se spoléhají na to, že konečný formát modulů zpracuje bundler.

Příklad:

{
  "compilerOptions": {
    "module": "ESNext"
  }
}

lib

Možnost lib specifikuje seznam souborů knihoven, které mají být zahrnuty do kompilace. Tyto soubory knihoven poskytují definice typů pro vestavěná JavaScript API a API prohlížečů. Mezi běžné hodnoty patří 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 dalších. Výběr vhodných knihoven zajišťuje, že kompilátor TypeScriptu má potřebné informace o typech pro cílové prostředí. Použití knihovny DOM umožňuje projektu kompilovat kód, který využívá API specifická pro prohlížeče, bez typových chyb.

Příklad:

{
  "compilerOptions": {
    "lib": ["ES2020", "DOM"]
  }
}

allowJs

Možnost allowJs umožňuje kompilátoru TypeScriptu kompilovat JavaScriptové soubory spolu se soubory TypeScriptu. To je užitečné pro postupnou migraci existujících JavaScriptových projektů na TypeScript. Nastavení této hodnoty na true umožňuje kompilátoru zpracovávat soubory .js, což umožňuje postupnou adopci TypeScriptu v rámci projektu.

Příklad:

{
  "compilerOptions": {
    "allowJs": true
  }
}

jsx

Možnost jsx specifikuje, jak se má zpracovávat syntaxe JSX. Běžné hodnoty zahrnují preserve, react, react-native a react-jsx. preserve zachovává syntaxi JSX ve výstupu, zatímco react transformuje JSX na volání React.createElement. react-jsx používá novou JSX transformaci zavedenou v React 17, která nevyžaduje import Reactu. Výběr správné možnosti JSX je klíčový pro projekty používající React nebo jiné knihovny založené na JSX.

Příklad:

{
  "compilerOptions": {
    "jsx": "react-jsx"
  }
}

declaration

Možnost declaration generuje odpovídající deklarační soubory .d.ts pro každý soubor TypeScriptu. Deklarační soubory obsahují informace o typech a jsou používány jinými projekty v TypeScriptu k využívání zkompilovaného kódu. Generování deklaračních souborů je nezbytné pro vytváření znovupoužitelných knihoven a modulů. Tyto soubory umožňují jiným projektům v TypeScriptu porozumět typům a rozhraním, které knihovna odhaluje, aniž by bylo nutné kompilovat původní zdrojový kód.

Příklad:

{
  "compilerOptions": {
    "declaration": true
  }
}

sourceMap

Možnost sourceMap generuje soubory zdrojových map, které mapují generovaný JavaScriptový kód zpět na původní kód TypeScriptu. Zdrojové mapy jsou nezbytné pro ladění kódu TypeScriptu v prohlížečích a jiných prostředích. Když dojde k chybě v JavaScriptovém kódu, zdrojová mapa umožňuje vývojáři vidět odpovídající kód TypeScriptu v debuggeru, což usnadňuje identifikaci a opravu problému.

Příklad:

{
  "compilerOptions": {
    "sourceMap": true
  }
}

outDir

Možnost outDir specifikuje výstupní adresář pro generované JavaScriptové soubory. Tato možnost pomáhá organizovat výstup sestavení projektu oddělením zdrojového kódu od zkompilovaného kódu. Použití outDir usnadňuje správu procesu sestavení a nasazení aplikace.

Příklad:

{
  "compilerOptions": {
    "outDir": "dist"
  }
}

rootDir

Možnost rootDir specifikuje kořenový adresář projektu TypeScript. Kompilátor používá tento adresář jako základ pro rozlišování názvů modulů. Tato možnost je obzvláště důležitá pro projekty se složitou adresářovou strukturou. Správné nastavení rootDir zajišťuje, že kompilátor dokáže najít všechny potřebné moduly a závislosti.

Příklad:

{
  "compilerOptions": {
    "rootDir": "src"
  }
}

strict

Možnost strict povoluje všechny možnosti striktní kontroly typů. Je vysoce doporučena pro nové projekty v TypeScriptu, protože pomáhá odhalit potenciální chyby v rané fázi vývojového procesu. Povolení striktního režimu vynucuje přísnější pravidla kontroly typů, což vede k robustnějšímu a udržitelnějšímu kódu. Je osvědčeným postupem povolit striktní režim ve všech nových projektech v TypeScriptu.

Příklad:

{
  "compilerOptions": {
    "strict": true
  }
}

esModuleInterop

Možnost esModuleInterop umožňuje interoperabilitu mezi moduly CommonJS a ES. To je důležité pro projekty, které používají oba typy modulů. Když je esModuleInterop povoleno, TypeScript automaticky zpracuje rozdíly mezi moduly CommonJS a ES, což usnadňuje import a export modulů mezi těmito dvěma systémy. Tato možnost je obzvláště užitečná při práci s knihovnami třetích stran, které mohou používat různé modulové systémy.

Příklad:

{
  "compilerOptions": {
    "esModuleInterop": true
  }
}

moduleResolution

Možnost moduleResolution specifikuje, jak TypeScript rozlišuje importy modulů. Běžné hodnoty zahrnují Node a Classic. Strategie rozlišování modulů Node je výchozí a je založena na algoritmu rozlišování modulů v Node.js. Strategie rozlišování modulů Classic je starší a méně používaná. Použití strategie rozlišování modulů Node zajišťuje, že TypeScript dokáže správně rozlišit importy modulů v prostředí Node.js.

Příklad:

{
  "compilerOptions": {
    "moduleResolution": "Node"
  }
}

baseUrl and paths

Možnosti baseUrl a paths se používají ke konfiguraci rozlišování modulů pro ne-relativní importy modulů. Možnost baseUrl specifikuje základní adresář pro rozlišování ne-relativních názvů modulů. Možnost paths vám umožňuje mapovat názvy modulů na konkrétní umístění v souborovém systému. Tyto možnosti jsou obzvláště užitečné pro projekty se složitou adresářovou strukturou a pro zjednodušení importů modulů. Použití baseUrl a paths může učinit kód čitelnějším a udržitelnějším.

Příklad:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@components/*": ["src/components/*"],
      "@utils/*": ["src/utils/*"]
    }
  }
}

Možnosti Include a Exclude

Možnosti include a exclude specifikují, které soubory mají být zahrnuty do kompilace a které soubory mají být vyloučeny. Tyto možnosti používají glob vzory pro shodu názvů souborů. Použití include a exclude vám umožňuje kontrolovat, které soubory jsou zpracovávány kompilátorem TypeScriptu, což zlepšuje výkon sestavení a snižuje počet chyb. Je osvědčeným postupem explicitně specifikovat soubory, které mají být zahrnuty do kompilace.

Příklad:

{
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}

Možnost Extends

Možnost extends vám umožňuje dědit možnosti kompilátoru z jiného souboru tsconfig.json. To je užitečné pro sdílení společných nastavení konfigurace mezi více projekty nebo pro vytváření základních konfigurací. Použití možnosti extends podporuje znovupoužití kódu a snižuje duplicitu. Je osvědčeným postupem vytvářet základní konfigurace a rozšiřovat je v jednotlivých projektech.

Příklad:

{
  "extends": "./tsconfig.base.json",
  "compilerOptions": {
    "jsx": "react-jsx"
  },
  "include": ["src/**/*"]
}

Pokročilé konfigurace

Kromě základních možností kompilátoru podporuje tsconfig.json pokročilé konfigurace pro specializované scénáře.

Inkrementální kompilace

U velkých projektů může inkrementální kompilace výrazně zkrátit dobu sestavení. TypeScript může ukládat výsledky předchozích kompilací do mezipaměti a znovu kompilovat pouze soubory, které se změnily. Povolení inkrementální kompilace může dramaticky snížit dobu sestavení u velkých projektů. To je zvláště důležité pro projekty s velkým počtem souborů a závislostí.

{
  "compilerOptions": {
    "incremental": true,
    "tsBuildInfoFile": ".tsbuildinfo"
  }
}

Odkazy na projekty

Odkazy na projekty vám umožňují strukturovat velké projekty v TypeScriptu do menších, nezávislých modulů. To může zlepšit dobu sestavení a organizaci kódu. Použití odkazů na projekty může učinit velké projekty lépe spravovatelnými a snáze udržovatelnými. Je osvědčeným postupem používat odkazy na projekty pro velké a složité projekty.

{
  "compilerOptions": {
    "composite": true
  },
  "references": [
    { "path": "./module1" },
    { "path": "./module2" }
  ]
}

Vlastní definice typů

Někdy budete muset poskytnout definice typů pro JavaScriptové knihovny, které je nemají. Můžete vytvořit vlastní soubory .d.ts k definování typů pro tyto knihovny. Vytváření vlastních definic typů vám umožňuje používat JavaScriptové knihovny ve vašem kódu TypeScript bez obětování typové bezpečnosti. To je zvláště užitečné při práci se starším JavaScriptovým kódem nebo knihovnami, které neposkytují vlastní definice typů.

// custom.d.ts
declare module 'my-library' {
  export function doSomething(x: number): string;
}

Osvědčené postupy

Řešení běžných problémů

Konfigurace souboru tsconfig.json může být někdy náročná. Zde jsou některé běžné problémy a jejich řešení:

Problémy s rozlišováním modulů

Pokud narazíte na chyby při rozlišování modulů, ujistěte se, že je možnost moduleResolution správně nakonfigurována a že jsou možnosti baseUrl a paths správně nastaveny. Dvakrát zkontrolujte cesty zadané v možnosti paths, abyste se ujistili, že jsou správné. Ověřte, že jsou všechny potřebné moduly nainstalovány v adresáři node_modules.

Typové chyby

Typové chyby se mohou objevit, pokud jsou definice typů nesprávné nebo chybí. Ujistěte se, že máte nainstalované správné definice typů pro všechny knihovny, které používáte. Pokud používáte JavaScriptovou knihovnu, která nemá definice typů, zvažte vytvoření vlastních definic typů.

Chyby kompilace

Chyby kompilace se mohou objevit, pokud jsou ve vašem kódu TypeScriptu syntaktické nebo typové chyby. Pečlivě si projděte chybové zprávy a opravte všechny syntaktické nebo typové chyby. Ujistěte se, že váš kód dodržuje kódovací konvence TypeScriptu.

Závěr

Správně nakonfigurovaný soubor tsconfig.json je nezbytný pro úspěšný projekt v TypeScriptu. Porozuměním základním možnostem kompilátoru a pokročilým konfiguracím můžete optimalizovat svůj vývojový pracovní postup, zlepšit kvalitu kódu a zajistit kompatibilitu s cílovým prostředím. Investice času do správné konfigurace tsconfig.json se v dlouhodobém horizontu vyplatí snížením chyb, zlepšením udržovatelnosti a zefektivněním procesu sestavení. To vede k efektivnějšímu a spolehlivějšímu vývoji softwaru. Zde poskytnuté informace jsou navrženy tak, aby byly univerzálně použitelné a měly by poskytnout pevný základ pro zahájení nového projektu s TypeScriptem.

Nezapomeňte nahlédnout do oficiální dokumentace TypeScriptu pro nejaktuálnější informace a podrobná vysvětlení všech dostupných možností kompilátoru. Dokumentace TypeScriptu je cenným zdrojem pro pochopení složitostí konfigurace TypeScriptu.