Přehled
Na konci dobrodružství přijde přehled: kolik úkolů je splněných, otevřených a neúspěšných a kolik má Kira zlata, když se k němu přičtou odměny za splněné úkoly.
K počítání potřebujete číslo pro každý stav, tedy objekt s jedním klíčem pro každý stav, a na to je Record z lekce Modelování dat. Stavy přitom nemusíte psát znovu: Ukol["stav"] z minulé lekce je sjednocení všech stavů. Třeba příšery v jeskyni, spočítané podle druhu:
type Prisera = { druh: "skret" | "vlk" | "troll"; jmeno: string };
const jeskyne: Prisera[] = [
{ druh: "skret", jmeno: "Grub" },
{ druh: "vlk", jmeno: "Šedák" },
{ druh: "skret", jmeno: "Snag" },
];
const pocty: Record<Prisera["druh"], number> = { skret: 0, vlk: 0, troll: 0 };
for (const prisera of jeskyne) {
pocty[prisera.druh]++;
}
console.log(pocty);
console.log(`Skřeti: ${pocty.skret}`);Vypíše:
{ skret: 2, vlk: 1, troll: 0 }
Skřeti: 2pocty[prisera.druh] použije druh jako klíč, takže každá příšera přičte jedničku ke svému počtu. TypeScript hlídá, že objekt má všechny klíče. Ve vašem programu by bez neuspesny: 0 ohlásil main.ts(122,7): error TS2741: Property 'neuspesny' is missing in type '{ otevreny: number; splneny: number; }' but required in type 'Record<"neuspesny" | "otevreny" | "splneny", number>'. A kdyby do typu Ukol někdy přibyl nový stav, ohlásí i tenhle objekt.
Teď zlato. Odměnu má jen splněný úkol, takže čtení ukol.odmena bez kontroly je chyba:
main.ts(126,36): error TS2339: Property 'odmena' does not exist on type 'Ukol'.
Property 'odmena' does not exist on type '{ stav: "otevreny"; nazev: string; }'.Uvnitř if (ukol.stav === "splneny") TypeScript zúží úkol na splněný a ukol.odmena je v pořádku. Kira je v konstantě, ale zlato jí změnit můžete: const jen znamená, že proměnná drží pořád tentýž objekt.
Jak psát:
Pokyny
V hlavním programu nad cyklus přes úkoly vytvořte konstantu pocty typu Record<Ukol["stav"], number> s nulou pro každý stav.
V cyklu přičtěte jedničku k počtu stavu každého úkolu. Za cyklem počty vypište:
Splněné: 2, otevřené: 1, neúspěšné: 1Ve stejném cyklu přičtěte Kiře ke zlatu odměnu za každý splněný úkol. Úplně na konci vypište ještě jednou řádek o Kiře. Program končí takto:
Splněné: 2, otevřené: 1, neúspěšné: 1
Kira (hranicar), úroveň 3, životy 50/50, zlato 200Kira má životy z lektvaru a zlato ze dvou úkolů. Pokud má pořád 120 zlatých, vypisujete ji před cyklem.
Začněte programovat zdarma
6/7