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:
constmístoreadonlyv typu:{ const jmeno: string }skončí hláškou';' expected.V typu se píšereadonly.- Změna pomocí
+=nebo++: i to je změna.kira.jmeno += "!"skončí stejnou chybou jakokira.jmeno = "Bruno".
Jak psát:
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ň 4Začněte programovat zdarma
5/10