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
undefineda výpočet sundefineddá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 vlastnostZivoty, 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
toUppercasenení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émaxZivotynelze 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.
Jak psát:
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: 34Vlk 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: 24Začněte programovat zdarma
6/7