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áškouType '{ 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.cenaskončí hláškouProperty 'cena' does not exist on type 'Predmet[]'.Cenu nemá pole, jen jeho prvky:predmet.cena.
Jak psát:
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ýchNapiš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ýchZačněte programovat zdarma
8/10