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
nazevv 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 vpouzijPredmet. - Typy objektů:
interface Hrdinapopisuje Kiru, se jménem jen pro čtení a s nepovinnou zbraní. - Sjednocené typy a zužování:
Povolanidovolí jen tři povolání,findmůže vrátitundefineda kontrolapredmet === undefinedsi poradí s dračím vejcem. - Modelování dat: předměty i úkoly jsou rozlišená sjednocení.
switchje zužuje, kontrola úplnosti hlídápopisPredmetaRecorddrží 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 typuUkol, 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,npmanpx, 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říkazemcda nainstalujte do ní TypeScript:
První příkaz vytvoří soubornpm init -y npm install --save-dev typescriptpackage.json, který projekt popisuje. Druhý stáhne TypeScript (dnes verzi 7, stejnou, jaká tady kontrolovala vaše programy) do složkynode_modules.
Program uložte do složky jako main.ts. Zkontrolujete ho překladačem TypeScriptu, tsc:
npx tsc --noEmit main.tsKdyž 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.tsNode.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, nebonull, 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++.
Jak psát:
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 200Začněte programovat zdarma
7/7