Pole objektů

Obchod má spoustu předmětů. Pole objektů dostane typ jako každé jiné pole: Predmet[] je pole, jehož každý prvek je Predmet. Vyplatí se ho psát, protože bez něj může chyba v jednom prvku proklouznout. Tady je u lana překlep:

const obchod = [
    { nazev: "Léčivý lektvar", cena: 25 },
    { nazev: "Lano", cenna: 5 },
];

for (const predmet of obchod) {
    console.log(predmet.cena);
}

Vypíše:

25
undefined

Žádná chyba! TypeScript odvodil typ pole z prvků tak, jak jsou: jeden má cena, druhý cenna. Nemůže vědět, který zápis je správný, a tak predmet.cena pustí jako hodnotu, která může být undefined. S Predmet[] mu řeknete, jak musí vypadat každý prvek:

type Predmet = { nazev: string; cena: number };

const obchod: Predmet[] = [
    { nazev: "Léčivý lektvar", cena: 25 },
    { nazev: "Lano", cenna: 5 },
    { nazev: "Lampa", cena: "12" },
];
main.ts(5,22): error TS2561: Object literal may only specify known properties, but 'cenna' does not exist in type 'Predmet'. Did you mean to write 'cena'?
main.ts(6,23): error TS2322: Type 'string' is not assignable to type 'number'.

Každá chyba ukazuje řádkem a sloupcem na prvek, ve kterém je problém.

V cyklu for...of přes Predmet[] je každý predmet typu Predmet, takže TypeScript ví, že predmet.cena je číslo. Můžete ji bez obav sčítat a překlep jako predmet.cenna ohlásí: Property 'cenna' does not exist on type 'Predmet'. Did you mean 'cena'? Nový prvek zkontroluje i push: obchod.push({ nazev: "Mapa" }) skončí hláškou Property 'cena' is missing in type '{ nazev: string; }' but required in type 'Predmet'.

A pole, které začíná prázdné a prvky dostane až později, typ potřebuje, jak víte z lekce 2: const kosik: Predmet[] = [];.

Typické chyby:

  • Zapomenuté []. const obchod: Predmet = [...] skončí hláškou Type '{ nazev: string; cena: number; }[]' is missing the following properties from type 'Predmet': nazev, cena. Jinými slovy: pole předmětů není předmět.
  • Pole místo prvku v cyklu. celkem += obchod.cena skončí hláškou Property 'cena' does not exist on type 'Predmet[]'. Cenu nemá pole, jen jeho prvky: predmet.cena.

Pokyny

Dejte proměnné obchod typ Predmet[]. TypeScript pak najde vadný prvek: opravte ho.

Cyklem for...of vypište každý předmět takhle:

Léčivý lektvar: 25 zlatých
Lektvar many: 30 zlatých
Protijed: 15 zlatých
Elixír síly: 60 zlatých

Napište funkci celkovaCena s parametrem predmety typu Predmet[] a návratovým typem number, která vrátí součet cen. Vypište řádek níže pomocí celkovaCena(obchod):

Celkem: 130 zlatých

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

8/10