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řeba 120, -5 nebo 2.5. TypeScript má pro všechna čísla jediný typ.
  • boolean: true, nebo false.
let jmeno = "Kira";   // string
let zlato = 120;      // number
let maMapu = false;   // boolean

TypeScript 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.length skončí hláškou Property 'length' does not exist on type 'number'. Délku mají texty a pole, čísla ne.

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: 120

Na 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 number

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

4/7