Objekty ve funkcích
Typy objektů se nejvíc hodí ve funkcích, jako typy parametrů a návratové typy. První řádek funkce pak řekne všechno podstatné: co funkce dostane a co vrátí.
Funkce, která vytváří objekty stejného tvaru (často se jí říká továrna, anglicky factory), dostane jejich typ jako návratový typ. TypeScript pak zkontroluje objekt, který vrací:
interface Prisera {
jmeno: string;
uroven: number;
zivoty: number;
}
function vytvorPriseru(jmeno: string, uroven: number): Prisera {
return { jmeno: jmeno, zivoty: uroven * 10 };
}main.ts(8,5): error TS2741: Property 'uroven' is missing in type '{ jmeno: string; zivoty: number; }' but required in type 'Prisera'.Bez návratového typu by funkce vrátila příšeru bez uroven a chyba by se projevila až později, všude tam, kde se úroveň příšery čte. S ním TypeScript ohlásí přímo return.
Tady je opravená verze, spolu s funkcí, která příšeru mění:
interface Prisera {
jmeno: string;
uroven: number;
zivoty: number;
}
function vytvorPriseru(jmeno: string, uroven: number): Prisera {
return { jmeno: jmeno, uroven: uroven, zivoty: uroven * 10 };
}
function rozzur(prisera: Prisera): void {
prisera.uroven = prisera.uroven + 2;
}
const vlk = vytvorPriseru("vlk", 3);
rozzur(vlk);
console.log(vlk);Vypíše:
{ jmeno: "vlk", uroven: 5, zivoty: 30 }vlk dostane typ Prisera z návratového typu funkce, bez anotace. rozzur mění přímo ten objekt, který jí předáte, ne jeho kopii, takže je změna vidět i mimo funkci, stejně jako když zvysUroven zvýšila Kiřinu úroveň ve cvičení o vlastnostech jen pro čtení. Její návratový typ je void: nic nevrací, jejím výsledkem je změna.
Volání se kontrolují stejně jako u parametrů jiných typů:
interface Prisera {
jmeno: string;
uroven: number;
zivoty: number;
}
function rozzur(prisera: Prisera): void {
prisera.uroven = prisera.uroven + 2;
}
rozzur("vlk");
rozzur({ jmeno: "troll", uroven: 4, zivoty: 40, nastvany: true });main.ts(11,8): error TS2345: Argument of type 'string' is not assignable to parameter of type 'Prisera'.
main.ts(12,49): error TS2353: Object literal may only specify known properties, and 'nastvany' does not exist in type 'Prisera'.První volání předává místo příšery text. Druhé předává objektový literál s vlastností navíc, jako ve cvičení o přebývajících vlastnostech.
Typické chyby:
- Vlastnost chybí ve vráceném objektu:
Property 'uroven' is missing in type ..., ohlášené ureturn. - Předání něčeho jiného než objektu, třeba jména příšery:
Argument of type 'string' is not assignable to parameter of type 'Prisera'.
Jak psát:
Pokyny
Napište funkci vytvorPriseru s parametry jmeno (typu string) a uroven (typu number) a návratovým typem Prisera. Vrátí novou příšeru s tímto jménem a úrovní a se zivoty rovnými uroven * 10.
Pomocí vytvorPriseru vytvořte vlk, vlka úrovně 2, a troll, trolla úrovně 5. Oba vypište pomocí popis. Program vypíše:
vlk: úroveň 2, 20 životů
troll: úroveň 5, 50 životůNapište funkci trenuj s parametrem prisera typu Prisera a návratovým typem void. Zvýší příšeře úroveň o 1 a životy o 10.
Vlka dvakrát natrénujte a pak ho znovu vypište pomocí popis. Program na konci vypíše:
vlk: úroveň 4, 40 životůZačněte programovat zdarma
9/10