Gratulujeme!

Gratulujeme, váš program funguje a jste na konci kurzu TypeScriptu! Program popíše Kiru, vypíše její předměty, použije je, zkusí najít předmět, který nemá, projde její úkoly a sestaví přehled. A než se spustil, TypeScript zkontroloval každý jeho řádek.

Poslední vylepšení. Kira najde kouzelný svitek, nový druh předmětu: { druh: "svitek"; nazev: string; kouzlo: string }. V obyčejném JavaScriptu byste svitek přidali a doufali, že jste nezapomněli na žádné místo, které s předměty pracuje. TypeScript ta místa najde za vás. Jakmile je typ Svitek ve sjednocení Predmet a svitek v Kiřině inventáři, ohlásí obě funkce se switch:

main.ts(45,19): error TS2322: Type 'Svitek' is not assignable to type 'never'.
main.ts(51,59): error TS2366: Function lacks ending return statement and return type does not include 'undefined'.

První chyba je kontrola úplnosti ve funkci popisPredmet, která pojmenuje typ bez case. Druhá je pouzijPredmet: ta kontrolu úplnosti nemá, ale její návratový typ string říká, že musí vrátit text pro každý předmět. Doplňte case do obou a program zase funguje. Ve velkém programu je tohle jedna z největších předností TypeScriptu: změníte data a on vám ukáže každé místo, které se o změně musí dozvědět.

Co jste se naučili. Podívejte se, jak si v programu našla místo každá lekce kurzu:

  • Úvod do TypeScriptu: TypeScript program zkontroluje dřív, než se spustí, a jeho hlášky říkají, co je špatně a na kterém řádku. Pak se typy odstraní a spustí se JavaScript, který zbude.
  • Základní typy: většina proměnných anotaci nepotřebuje, TypeScript sám odvodí, že nazev v cyklu je text. Typy píšete tam, kde na nich záleží.
  • Funkce mají typy parametrů i výsledku: popisHrdinu(hrdina: Hrdina): string. Návratový typ našel i chybějící případ v pouzijPredmet.
  • Typy objektů: interface Hrdina popisuje Kiru, se jménem jen pro čtení a s nepovinnou zbraní.
  • Sjednocené typy a zužování: Povolani dovolí jen tři povolání, find může vrátit undefined a kontrola predmet === undefined si poradí s dračím vejcem.
  • Modelování dat: předměty i úkoly jsou rozlišená sjednocení. switch je zužuje, kontrola úplnosti hlídá popisPredmet a Record drží počty.
  • Generika: najdiPodleNazvu<T extends { nazev: string }> najde cokoli, co má název, a výsledek si nechá svůj typ.
  • Třídy v programu nejsou: stačily obyčejné objekty a funkce. Třída se hodí, když k sobě patří data a metody, které je mění, třeba kdyby každá příšera měla vlastní utok().
  • Pomocné typy: Ukol["stav"] vezme stavy z typu Ukol, takže jsou napsané jen na jednom místě.

TypeScript ve vašem počítači. Tady programy kontroloval a spouštěl prohlížeč. Ve vlastním počítači budete potřebovat tři věci:

  • Editor. Visual Studio Code je zdarma a TypeScriptu rozumí bez jakéhokoli nastavování. Typové chyby podtrhává červeně už při psaní, a když na název najedete myší, ukáže jeho typ. Chyby tak uvidíte dřív, než soubor vůbec uložíte.
  • Node.js, který spouští JavaScript mimo prohlížeč. Stáhněte si z nodejs.org verzi LTS a nainstalujte ji. Dostanete s ní příkazy node, npm a npx, které se píšou do terminálu (ve Windows do Příkazového řádku, na Macu do aplikace Terminál).
  • TypeScript. Vytvořte pro projekt složku, třeba dobrodruzstvi, v terminálu do ní přejděte příkazem cd a nainstalujte do ní TypeScript:
    npm init -y
    npm install --save-dev typescript
    První příkaz vytvoří soubor package.json, který projekt popisuje. Druhý stáhne TypeScript (dnes verzi 7, stejnou, jaká tady kontrolovala vaše programy) do složky node_modules.

Program uložte do složky jako main.ts. Zkontrolujete ho překladačem TypeScriptu, tsc:

npx tsc --noEmit main.ts

Když je všechno v pořádku, nevypíše nic. Jinak vypíše hlášky, které znáte odsud, v terminálu barevně a pod každou hláškou i řádek kódu s chybou podtrženou vlnovkou ~~~. Jen místo chyby je zapsané trochu jinak: main.ts:2:1 - error TS2322: … znamená řádek 2, sloupec 1. --noEmit znamená „jen zkontroluj“: bez něj by tsc vytvořil i soubor main.js, váš program jako JavaScript bez typů. Program spustíte pomocí Node.js:

node main.ts

Node.js 24 a novější umí soubor .ts spustit přímo: odstraní typy a spustí JavaScript, který zbude. Typy ale nekontroluje! Program s typovou chybou se spustí stejně, jako by se spustil JavaScript. Proto nejdřív kontrolujte pomocí tsc a teprve pak spouštějte pomocí node. A Node.js umí typy jen odstranit. Vlastnosti TypeScriptu, ze kterých by musel vzniknout nový kód v JavaScriptu, třeba enum, ho zastaví s hláškou TypeScript enum is not supported in strip-only mode. Proto je tento kurz nepoužíval a tady na webu nebyly povolené.

Větší projekt má nastavení v souboru tsconfig.json. Vytvoří ho příkaz npx tsc --init s doporučeným nastavením a od té doby kontrolujete celý projekt příkazem npx tsc --noEmit, bez názvu souboru. (S názvem souboru by tsc nastavení nepoužil a řekne vám to chybou.) Toto nastavení je dokonce o něco přísnější než to tady. Třeba s volbou noUncheckedIndexedAccess má kira.inventar[0] typ Predmet | undefined, protože pole může být prázdné.

Co dál. Teď znáte to nejdůležitější z TypeScriptu a na vlastní programy vám to stačí. Pár nápadů, co dělat dál:

  • Vylepšujte svůj program. Kiřino povolání se vypisuje bez diakritiky, tak jak je v kódu. Spraví to tabulka Record<Povolani, string> s českými názvy povolání (hranicar: "hraničář" a tak dál). A pak třeba obchod, kde Kira nakupuje za své zlato, příšera, se kterou bojuje mečem v ruce, nebo vyšší úroveň za splněné úkoly. Nejvíc se naučíte, když řešíte vlastní problémy, a TypeScript vám u každé změny řekne, co rozbila.
  • Příručka TypeScriptu (TypeScript Handbook) na typescriptlang.org/docs vysvětluje všechno z tohoto kurzu podrobněji a ještě mnohem víc (anglicky). Na stejném webu je i Playground, kde si TypeScript vyzkoušíte přímo v prohlížeči a uvidíte, jaký JavaScript z něj vznikne.
  • Webové stránky v TypeScriptu. Stránka a její prvky z lekce kurzu JavaScriptu o webových stránkách mají v TypeScriptu také typy: document.querySelector("#seznam") vrátí prvek, nebo null, a TypeScript vás donutí to zkontrolovat, stejně jako u dračího vejce.
  • React, knihovna, ve které se webové aplikace skládají z komponent. Mnoho projektů v Reactu se píše v TypeScriptu a kurz Reactu na tomto webu časem přibude.

A pokud si chcete vyzkoušet další jazyk, čekají na vás kurzy Pythonu, C a C++.

Pokyny

Pod typ Klic napište typ Svitek s druh: "svitek", vlastností nazev a vlastností kouzlo (text) a přidejte ho do sjednocení Predmet. Na konec Kiřina inventáře přidejte { druh: "svitek", nazev: "Svitek světla", kouzlo: "Světlo" }. Spusťte program a opravte obě chyby, které TypeScript ohlásí: v popisPredmet dá svitek Svitek světla (kouzlo: Světlo) a v pouzijPredmet Kira sešle kouzlo Světlo. Program pak vypíše všechno ze začátku lekce:

Kira (hranicar), úroveň 3, životy 34/50, zlato 120
Inventář:
- Léčivý lektvar (léčí 20)
- Stříbrný meč (poškození 12)
- Starý klíč (otevírá kryptu)
- Svitek světla (kouzlo: Světlo)
Kira vypije Léčivý lektvar: životy 50/50
Kira si vezme Stříbrný meč
Kira nemá Dračí vejce
Úkoly:
[splněný] Vlci v lese: +50 zlatých
[otevřený] Ztracená koruna
[neúspěšný] Záchrana mlynáře: mlýn vyhořel
[splněný] Skřetí most: +30 zlatých
Splněné: 2, otevřené: 1, neúspěšné: 1
Kira (hranicar), úroveň 3, životy 50/50, zlato 200

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

7/7