Vlastnosti jen pro čtení

Některé vlastnosti by se po vytvoření objektu neměly nikdy změnit: jméno hrdiny, identifikační číslo předmětu. Označte je slovem readonly (jen pro čtení):

type Hrdina = { readonly jmeno: string; zivoty: number };

const kira: Hrdina = { jmeno: "Kira", zivoty: 50 };
kira.zivoty = 40;
kira.jmeno = "Bruno";
main.ts(5,6): error TS2540: Cannot assign to 'jmeno' because it is a read-only property.

zivoty se měnit smějí, takže řádek 4 je v pořádku. jmeno ne: Cannot assign to 'jmeno' because it is a read-only property (do jmeno nelze přiřadit, protože je to vlastnost jen pro čtení). Číst ho můžete dál, vypsat ho nebo předat funkci. Jeho hodnota se nastaví jednou, při vytvoření objektu.

Čím se to liší od const? const chrání proměnnou: v kira musí být pořád tentýž objekt. Vlastnosti objektu se ale měnit dají. Možná si z kurzu JavaScriptu pamatujete, že tohle funguje:

const kira = { jmeno: "Kira", zivoty: 50 };
kira.jmeno = "Bruno";
console.log(kira);

Vypíše:

{ jmeno: "Bruno", zivoty: 50 }

readonly chrání jednu vlastnost, ať je objekt v jakékoli proměnné, třeba i vytvořené pomocí let, a také ve funkcích, které objekt dostanou jako argument.

Jako každý typ hlídá readonly jen TypeScript a z JavaScriptu, který se spustí, zmizí. Za běhu by změně nic nebránilo. Program s takovou změnou se ale vůbec nespustí, protože ji TypeScript ohlásí dřív.

Typické chyby:

  • const místo readonly v typu: { const jmeno: string } skončí hláškou ';' expected. V typu se píše readonly.
  • Změna pomocí += nebo ++: i to je změna. kira.jmeno += "!" skončí stejnou chybou jako kira.jmeno = "Bruno".

Pokyny

Jméno by se měnit nemělo. Udělejte z vlastnosti jmeno vlastnost jen pro čtení. TypeScript pak ukáže řádek ve funkci zvysUroven, který jméno mění: smažte ho, protože úroveň už je uložená v uroven. Program vypíše Kira má úroveň 4.

Každý hrdina v cechu má identifikační číslo, které se nikdy nemění. Přidejte do typu Hrdina vlastnost jen pro čtení id typu number. TypeScript pak ohlásí Kiru, která žádné id nemá: dejte jí id: 7.

Na konci programu vypište řádek níže, pomocí kira.id, kira.jmeno a kira.uroven:

#7 Kira, úroveň 4

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

5/10