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;  // 10

uroven 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.

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/50

Teď 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

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

Nebo se registrujte pomocí:

7/9