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. (any kontrolu vypíná a dostanete se k němu na konci této lekce, bigint je typ pro obrovská celá čísla a enum je starší součást TypeScriptu, kterou tento kurz nepoužívá.) V JavaScriptu je "15" * 2 rovno 30, 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 je zlato === "120" vždycky false. 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
152

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

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

Bruno 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ých

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