Vnořené objekty
Vlastnost může obsahovat další objekt. Hrdina má na mapě pozici, tedy x a y. Typ takové vlastnosti je také typ objektu:
type Hrdina = {
jmeno: string;
pozice: { x: number; y: number };
};
const kira: Hrdina = { jmeno: "Kira", pozice: { x: 3, y: 4 } };
kira.pozice.x = kira.pozice.x + 1;
console.log(kira);
console.log(kira.pozice.x);Vypíše:
{ jmeno: "Kira", pozice: { x: 4, y: 4 } }
4kira.pozice.x čtěte zleva doprava: z kira vezměte pozice, objekt s x a y, a z něj x, číslo. Vnitřní objekt TypeScript kontroluje stejně pečlivě jako ten vnější.
Obvykle je lepší dát vnitřnímu typu vlastní název. Typy se zkrátí, pozici můžete použít i jinde (má ji i příšera nebo poklad) a chybové hlášky budou srozumitelnější. Porovnejte stejnou chybu, pozici bez y, nejdřív s typem napsaným uvnitř typu Hrdina:
type Hrdina = { jmeno: string; pozice: { x: number; y: number } };
const kira: Hrdina = { jmeno: "Kira", pozice: { x: 3 } };main.ts(3,39): error TS2741: Property 'y' is missing in type '{ x: number; }' but required in type '{ x: number; y: number; }'.a pak se samostatným typem Pozice:
type Pozice = { x: number; y: number };
type Hrdina = { jmeno: string; pozice: Pozice };
const kira: Hrdina = { jmeno: "Kira", pozice: { x: 3 } };main.ts(4,39): error TS2741: Property 'y' is missing in type '{ x: number; }' but required in type 'Pozice'.Všimněte si i sloupce. Ukazuje na vlastnost pozice, ve které je chyba, a ne na začátek objektu kira. Když je něco špatně hluboko uvnitř objektu, TypeScript vám ukáže kde. Čtení vlastnosti, která neexistuje, ohlásí s názvem vnitřního typu:
type Pozice = { x: number; y: number };
type Hrdina = { jmeno: string; pozice: Pozice };
const kira: Hrdina = { jmeno: "Kira", pozice: { x: 3, y: 4 } };
console.log(kira.pozice.z);main.ts(5,25): error TS2339: Property 'z' does not exist on type 'Pozice'.Vlastnost může obsahovat i pole. Inventář hrdiny může být inventar: string[], seznam názvů předmětů, nebo s typem Predmet třeba inventar: Predmet[], seznam celých objektů. I tam funguje všechno, co o polích a objektech víte: kira.inventar.push("lano"), kira.inventar.length nebo cyklus for...of přes kira.inventar.
Jak psát:
Pokyny
Vytvořte typ Zbran pro Kiřinu zbraň s vlastnostmi nazev typu string a poskozeni typu number.
Vytvořte typ Hrdina s vlastnostmi jmeno (typu string), pozice (typu Pozice) a zbran (typu Zbran) a dejte ho proměnné kira jako anotaci.
Kira ujde 3 kroky na východ: na konci programu zvyšte kira.pozice.x o 3. Pak vypište řádek níže, s hodnotami z kira.pozice:
Kira stojí na 5, 5V truhle Kira najde lepší luk. Do kira.zbran uložte nový objekt zbraně: Elfí luk s poškozením 12. Pak vypište řádek níže, s hodnotami z kira.zbran:
Kira drží Elfí luk (poškození 12)Začněte programovat zdarma
7/10