Konstanty a literálové typy
Z minulé lekce víte, že do konstanty nejde znovu přiřadit: TypeScript ohlásí TS2588 ještě před spuštěním programu. Toho TypeScript využívá i při odvozování typů. Porovnejte:
let uroven = 3; // number
const maxUroven = 10; // 10uroven je vytvořená pomocí let, takže později může obsahovat jakékoli jiné číslo, a jejím typem je number. maxUroven se nikdy nezmění, a proto jí TypeScript dá ten nejpřesnější typ, jaký existuje: 10. Takovému typu, který dovoluje jedinou hodnotu, se říká literálový typ. U textů je to stejné: const jmeno = "Kira"; je typu "Kira".
Hodnota literálového typu je pořád obyčejné číslo nebo text: maxUroven + 1 i jmeno.length fungují jako obvykle. Všimnete si ho hlavně v chybových hláškách:
const zlato = 120;
console.log(zlato.toUpperCase());main.ts(2,19): error TS2339: Property 'toUpperCase' does not exist on type '120'.type '120' čtěte jako „číslo 120“. U textů je literálový typ v dvojitých uvozovkách uvnitř jednoduchých uvozovek hlášky: '"prsi"' znamená přesně text prsi:
const pocasi = "prsi";
if (pocasi === "slunecno") {
console.log("Kira si suší plášť.");
}main.ts(2,5): error TS2367: This comparison appears to be unintentional because the types '"prsi"' and '"slunecno"' have no overlap.pocasi je konstanta s hodnotou "prsi", takže nikdy nemůže být "slunecno" a podmínka nemůže být nikdy splněná. TypeScript vás na to upozorní. Ve skutečné hře by se počasí měnilo, takže by bylo vytvořené pomocí let a porovnání by bylo v pořádku.
Literálový typ můžete napsat i sami, jako anotaci. Proměnná pak smí obsahovat jen tuto jedinou hodnotu:
let obtiznost: "tezka" = "tezka";
obtiznost = "lehka";main.ts(2,1): error TS2322: Type '"lehka"' is not assignable to type '"tezka"'.Typ s jedinou hodnotou sám o sobě moc užitečný není. V lekci 5 jich spojíte několik: "lehka" | "normalni" | "tezka" je typ, který dovoluje právě tyto tři texty, a TypeScript pak zachytí každý překlep v nich.
let, nebo const? Stejně jako v kurzu JavaScriptu: const pro hodnoty, které se nemění, a těch je většina, let jen pro ty, které se měnit budou, třeba životy, zlato nebo počítadlo. TypeScript to pak pohlídá ještě před spuštěním programu.
Jak psát:
Pokyny
Kira stojí proti drakovi, ale TypeScript hlásí dvě chyby. Kiřiny životy se během boje mění: opravte program tak, aby vypsal:
Plamen chrlí oheň!
Kiřiny životy: 35/50
Plamen chrlí oheň znovu!
Kiřiny životy: 20/50Teď se podívejte na ostatní proměnné: jmenoDraka a poskozeniOhnem se nikdy nemění, a proto z nich udělejte konstanty. maxZivoty zůstane konstantou.
Začněte programovat zdarma
7/9