Proměnné bez hodnoty
Proměnná vytvořená bez hodnoty, třeba let odmena: number;, zpočátku žádnou hodnotu nemá: v JavaScriptu je v ní undefined. Hodnota se do ní uloží později, často ve větvích příkazu if. TypeScript sleduje všechny cesty, kudy může program projít, a kontroluje, že všude, kde proměnnou použijete, už určitě nějakou hodnotu má:
let prisera = "skret";
let odmena: number;
if (prisera === "vlk") {
odmena = 50;
} else if (prisera === "skret") {
odmena = 20;
}
console.log("Odměna:", odmena);main.ts(10,24): error TS2454: Variable 'odmena' is used before being assigned.Hláška říká, že proměnná je použitá dřív, než do ní byla přiřazena hodnota. Příšera je ale skřet, takže odmena dostane 20, ne? Tentokrát ano. TypeScript se ale nedívá, co je v proměnné prisera právě teď. Kontroluje všechny cesty, kterými se program může vydat. Kdyby příšerou byl drak, neprovedla by se žádná z větví a program by vypsal Odměna: undefined. Výpočet jako zlato + odmena by pak dal NaN.
Opravíte to tak, že hodnotu uloží každá cesta, nejčastěji pomocí větve else, která se provede ve všech ostatních případech:
if (prisera === "vlk") {
odmena = 50;
} else if (prisera === "skret") {
odmena = 20;
} else {
odmena = 0;
}Druhá možnost je počáteční hodnota: let odmena = 0;. Proměnná pak má hodnotu od začátku, větve ji jen mění a typ ani nemusíte psát, protože ho TypeScript odvodí z nuly. Vyberte, co se hodí: počáteční hodnotu, když nějaká rozumná existuje, a proměnnou bez hodnoty, když hodnota opravdu vzniká až ve větvích. TypeScript pak pohlídá, že jste na žádnou větev nezapomněli.
Typické chyby:
ifneboelse ifbez závěrečnéhoelse.- Větev, která dělá něco jiného a na uložení hodnoty zapomene.
- Proměnná, která hodnotu nedostane vůbec:
let odmena: number;a za tímconsole.log(odmena);skončí stejnou chybouTS2454.
Jak psát:
Pokyny
Spusťte program: TypeScript dvakrát ohlásí TS2454. Větev else pro velký pokoj zapomněla nastavit cenu. Velký pokoj stojí 25 zlatých. Opravte větev tak, aby program vypsal:
Nejlepší pokoj v domě!
Kira platí 25 zlatých, zbývá jí 95.Bruno podává i večeři a ta také záleží na pokoji. Pod proměnnou cena vytvořte proměnnou jidlo typu string bez hodnoty. Pak do ní v každé ze tří větví uložte hodnotu: "chléb" pro malý pokoj, "polévka" pro střední a "pečené kuře" pro velký.
Na konci programu vypište večeři, aby program vypsal ještě:
Večeře: pečené kuřePokud TypeScript ohlásí u proměnné jidlo chybu TS2454, zkontrolujte, že do ní hodnotu ukládá každá větev.
Začněte programovat zdarma
3/9