Které operace jsou dovolené
TypeScript ví, co který operátor s kterým typem dělá, a ohlásí operace, které nedávají smysl. Tento program jich má čtyři:
let zlato = 120;
const cenovka = "15";
console.log(cenovka * 2);
console.log(zlato - cenovka);
if (zlato === "120") {
console.log("Kira je bohatá!");
}
if (zlato > "100") {
console.log("Kira je bohatá!");
}main.ts(4,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
main.ts(5,21): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
main.ts(6,5): error TS2367: This comparison appears to be unintentional because the types 'number' and 'string' have no overlap.
main.ts(9,5): error TS2365: Operator '>' cannot be applied to types 'number' and 'string'.- Počítat se dá jen s čísly. Operátory
-,*,/a%provádějí aritmetické operace a obě jejich strany, levá (left-hand side) i pravá (right-hand side), musí být čísla. (anykontrolu vypíná a dostanete se k němu na konci této lekce,bigintje typ pro obrovská celá čísla a enum je starší součást TypeScriptu, kterou tento kurz nepoužívá.) V JavaScriptu je"15" * 2rovno30, protože JavaScript text na číslo převede sám. TypeScript to bere jako chybu: nejspíš jste nevěděli, že je hodnota text, a s+by se stejná hodnota místo sčítání připojila. - Číslo a text se nikdy nerovnají.
===porovnává i typy, takže v JavaScriptu jezlato === "120"vždyckyfalse. TypeScript upozorní, že porovnání vypadá jako omyl, protože žádná hodnota nemůže být zároveň číslo i text (typy se „nepřekrývají“, anglicky have no overlap). Porovnání pomocí<nebo>je také chyba. - Spojování pomocí
+je dovolené. Když je na jedné straně+text,+spojuje, jak to znáte:"Zlato: " + zlato.
Když je číslo uložené jako text, převeďte ho. Number() z kurzu JavaScriptu převede text na číslo a String() převede číslo na text:
console.log(Number("15") * 2);
console.log(String(15) + 2);Vypíše:
30
152TypeScript ví, že Number(…) je vždycky typu number, takže Number(cenovka) * 2 je v pořádku. Neví ale, jestli je v textu opravdu číslo: Number("patnáct") dá NaN, stejně jako v JavaScriptu.
Jak psát:
Pokyny
Kira kupuje u Bruna 40 šípů, ale TypeScript hlásí dvě chyby. Opravte obě: cenu z cenovky převeďte pomocí Number() na číslo a zlato porovnávejte s číslem 50. Program pak vypíše:
Kiře dochází zlato!
Zbývá zlata: 40Bruno vystaví Kiře účtenku. Na konci programu ji vypište tak, že texty spojíte s proměnnými pocet a celkem pomocí +:
Účtenka: 40 šípů za 80 zlatýchZačněte programovat zdarma
4/9