Chybějící a přebývající vlastnosti
Když má proměnná typ, TypeScript zkontroluje každý objekt, který do ní uložíte, vlastnost po vlastnosti. Pořád dokola se objevují dvě chyby: nějaká vlastnost chybí, nebo jedna přebývá. Nejdřív chybějící vlastnost:
type Predmet = { nazev: string; cena: number };
const lano: Predmet = { nazev: "Lano" };main.ts(3,7): error TS2741: Property 'cena' is missing in type '{ nazev: string; }' but required in type 'Predmet'.Čtěte to takhle: objekt, který jste napsali, má typ { nazev: string; }, ale Predmet vyžaduje ještě cena. V JavaScriptu by se lano dostalo do obchodu bez ceny a součet nákupu by vyšel NaN. Když chybí víc vlastností, hláška je vyjmenuje všechny, například Type '{ nazev: string; }' is missing the following properties from type 'Predmet': cena, vaha (TS2739).
Teď vlastnost, která přebývá:
type Predmet = { nazev: string; cena: number };
const lano: Predmet = { nazev: "Lano", cena: 5, vaha: 2 };main.ts(3,49): error TS2353: Object literal may only specify known properties, and 'vaha' does not exist in type 'Predmet'.Objektový literál (object literal) je objekt zapsaný přímo v kódu, ve složených závorkách. Přebývající vlastnost v něm obvykle znamená jedno ze dvou. Buď typu chybí vlastnost, kterou potřebujete, a pak ji do typu přidáte, nebo vlastnost do objektu nepatří, a pak ji smažete.
Velmi často jde o překlep. TypeScript pak odhadne, co jste mysleli:
type Predmet = { nazev: string; cena: number };
const lano: Predmet = { nazev: "Lano", cenna: 5 };main.ts(3,40): error TS2561: Object literal may only specify known properties, but 'cenna' does not exist in type 'Predmet'. Did you mean to write 'cena'?Přebývající vlastnosti se kontrolují jen u objektových literálů. Objekt, který už existuje v jiné proměnné, smí mít víc vlastností, než typ potřebuje. TypeScript jen vyžaduje, aby měl všechny vlastnosti typu:
type Predmet = { nazev: string; cena: number };
const korist = { nazev: "Lano", cena: 5, vaha: 2 };
const lano: Predmet = korist;
console.log(lano);Vypíše:
{ nazev: "Lano", cena: 5, vaha: 2 }Tak TypeScript o objektech uvažuje obecně: objekt je Predmet, když má všechno, co Predmet potřebuje.
Jak psát:
Pokyny
Opravte obě příšery, které TypeScript hlásí. U trolla je překlep a skřetovi chybí poškození: způsobuje 3. Program vypíše:
vlk: 30 životů, poškození 6
troll: 80 životů, poškození 12
skřet: 20 životů, poškození 3Do lesa přišel pavouk. Pod skřeta přidejte const pavouk: Prisera = { jmeno: "pavouk", zivoty: 15, poskozeni: 4, odmena: 8 }; a na konci vypište popis(pavouk). TypeScript ohlásí vlastnost odmena, kterou příšery nemají. Tentokrát něco chybí typu: přidejte do typu Prisera vlastnost odmena: number. TypeScript pak ohlásí zbylé tři příšery, protože žádnou odměnu nemají. Doplňte ji: 10 za vlka, 40 za trolla a 5 za skřeta. Program pak vypíše i pavouk: 15 životů, poškození 4.
Na konci programu vypište odměnu za všechny čtyři příšery dohromady, jako součet jejich vlastností odmena:
Odměna: 63 zlatýchZačněte programovat zdarma
3/10