Chyby, které vás zachrání

V kurzu JavaScriptu některé chyby žádnou chybovou hlášku nezpůsobily. Program běžel a dal podivný výsledek, nebo spadl, až když na chybu narazil. Tento program má tři takové chyby:

const hrdina = { jmeno: "Kira", zivoty: 50 };
const maxZivoty = 50;

hrdina.zivoty = hrdina.zivty - 10;
console.log("Životy:", hrdina.zivoty);
console.log(hrdina.jmeno.toUppercase());
maxZivoty = 60;

Jako JavaScript by vypsal Životy: NaN a pak spadl s chybou TypeError: hrdina.jmeno.toUppercase is not a function. Na třetí chybu by došlo, až byste opravili tu druhou. TypeScript najde všechny tři dřív, než se program spustí:

main.ts(4,24): error TS2551: Property 'zivty' does not exist on type '{ jmeno: string; zivoty: number; }'. Did you mean 'zivoty'?
main.ts(6,26): error TS2551: Property 'toUppercase' does not exist on type 'string'. Did you mean 'toUpperCase'?
main.ts(7,1): error TS2588: Cannot assign to 'maxZivoty' because it is a constant.
  • Překlep v názvu vlastnosti. V JavaScriptu dá vlastnost, která neexistuje, hodnotu undefined a výpočet s undefined dá NaN. TypeScript ví, jaké vlastnosti objekt má, protože vidí, jak jste ho vytvořili. Překlep zachytí, i když do vlastnosti přiřazujete: hrdina.Zivoty = 60; by v JavaScriptu potichu přidalo novou vlastnost Zivoty, kdežto TypeScript ohlásí Property 'Zivoty' does not exist on type … a poradí zivoty.
  • Překlep v názvu metody. Velká a malá písmena se liší, takže toUppercase není toUpperCase. TypeScript zná všechny metody textů a poradí tu správnou.
  • Přiřazení do konstanty. V JavaScriptu to byla chyba TypeError: Assignment to constant variable., ale až za běhu programu. TypeScript ji ohlásí předem: Cannot assign to 'maxZivoty' because it is a constant. (do proměnné maxZivoty nelze přiřadit, protože je to konstanta). Pokud se hodnota měnit má, vytvořte proměnnou pomocí let. Pokud ne, nic do ní nepřiřazujte.

Pamatujte, že const chrání proměnnou, ne objekt v ní. hrdina.zivoty = … výše je v pořádku, přestože hrdina je konstanta: v konstantě je pořád tentýž objekt, mění se jen jeho vlastnost. Tak funguje JavaScript a TypeScript se tím řídí.

Všechny tyto chyby se snadno udělají a ve velkém programu se těžko hledají, protože JavaScript ukáže jejich následek jinde, než kde jsou. TypeScript ukáže přímo na řádek s chybou. To je hlavní důvod, proč ho programátoři používají: spousta chyb se díky němu do běžícího programu vůbec nedostane.

Pokyny

V editoru Kira bojuje s vlkem. Program má čtyři chyby a jako JavaScript by spadl hned na řádku 6. Opravte je všechny, aby program vypsal:

KIRA VS VLK
1. kolo, Kiřiny životy: 42
2. kolo, Kiřiny životy: 34

Vlk se nevzdává. Na konec programu přidejte třetí kolo: zvyšte kolo o 1 a vlkovi utok o 2 (vlk se rozzuřil), pak snižte Kiře životy o vlkův útok a vypište stejný řádek jako po ostatních kolech. vlk je konstanta, ale vy měníte jen jeho vlastnost, takže to TypeScript dovolí. Program pak vypíše:

KIRA VS VLK
1. kolo, Kiřiny životy: 42
2. kolo, Kiřiny životy: 34
3. kolo, Kiřiny životy: 24

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

6/7