Odvozování typů
V minulých cvičeních jste TypeScriptu nikde neřekli, že v proměnné lektvary je číslo nebo že hrdinka má vlastnost zivoty. TypeScript na to přišel sám, podle hodnot. Tomu se říká odvozování typů: TypeScript odvodí typ každé proměnné z hodnoty, kterou do ní uložíte.
Pro jednoduché hodnoty má TypeScript tři základní typy. Jmenují se stejně, jako je pojmenovává typeof v JavaScriptu:
string: text, třeba"Kira"nebo"".number: jakékoli číslo, celé i desetinné, třeba120,-5nebo2.5. TypeScript má pro všechna čísla jediný typ.boolean:true, nebofalse.
let jmeno = "Kira"; // string
let zlato = 120; // number
let maMapu = false; // booleanTypeScript odvozuje i typy objektů a polí. Pro { jmeno: "Kira", zivoty: 50 } je to typ { jmeno: string; zivoty: number; }, jak jste viděli v chybové hlášce v minulém cvičení. Víc se o takových typech dozvíte v dalších lekcích.
Na typu záleží, co s hodnotou smíte dělat. Text má délku a dá se převést na velká písmena, u čísla nejde ani jedno:
let jmeno = "Kira";
let zlato = 120;
console.log(jmeno.toUpperCase());
console.log(zlato.toUpperCase());main.ts(5,19): error TS2339: Property 'toUpperCase' does not exist on type 'number'.toUpperCase() je metoda textů, a proto ji TypeScript dovolí pro proměnnou jmeno, která je typu string. U proměnné zlato, která je typu number, ohlásí, že typ number takovou vlastnost nemá. (Metoda je vlastnost, jejíž hodnotou je funkce, proto hláška mluví o vlastnosti.) Jako JavaScript by tento program vypsal KIRA a pak spadl s chybou TypeError: zlato.toUpperCase is not a function, ovšem až ve chvíli, kdy by se k tomu řádku dostal. Kdyby byl ten řádek uvnitř if, který se provede jen občas, mohla by chyba zůstat skrytá celé týdny. TypeScript kontroluje každý řádek, i ten, který se zrovna neprovede.
Ještě jedné věci si možná všimnete: s const zlato = 120; by hláška místo typu 'number' uvedla typ '120'. Je to typ, který dovoluje jen to jedno číslo, protože konstanta se nikdy nezmění. Víc se dozvíte v příští lekci.
Typické chyby:
- Metoda textů použitá na číslo, jako výše, často proto, že se spletly dvě proměnné.
- Délka čísla:
zlato.lengthskončí hláškouProperty 'length' does not exist on type 'number'.Délku mají texty a pole, čísla ne.
Jak psát:
Pokyny
List postavy v editoru má vypsat Kiřino povolání velkými písmeny, ale spletla se v něm proměnná. Spusťte program, podle chybové hlášky najděte chybu a opravte ji, aby program vypsal:
Jméno: KIRA
Povolání: HRANIČÁŘKA
Zlato: 120Na konci programu vypište pomocí typeof z JavaScriptu typy všech tří proměnných, v pořadí jmeno, povolani, zlato. Jsou to stejné typy, jaké odvodil TypeScript. Program pak vypíše ještě:
Typy: string string numberZačněte programovat zdarma
4/7