Shrnutí
V této lekci jste se naučili, že:
- Funkce, která má fungovat s každým typem, o typ přijde s
any(chyby proklouznou) i sunknown(po každém volání musíte zužovat). Funkce pro každý typ zvlášť opakují stejný kód. Řešením jsou generika. - Generická funkce má ve špičatých závorkách typový parametr:
function prvni<T>(prvky: T[]): T | undefined.Tje typ, který se dosadí při každém volání: proprvni(jmena)jeTtypstring. - Typové argumenty TypeScript odvodí z argumentů. Můžete je napsat i sami,
prvni<string>(jmena); je to potřeba, když by TypeScript odvodil příliš úzký typ:naplnTri<string | null>(null). Funkce může mít víc typových parametrů:dvojice<A, B>(prvni: A, druhy: B): [A, B]. string[]je zkratka proArray<string>. U sjednocení jeArray<string | number>čitelnější než(string | number)[];string | number[]znamená něco jiného. Generický typ je iRecord<K, V>.- I vaše vlastní typy můžou být generické:
type Truhla<T> = { misto: string; korist: T };,interface Police<T> { veci: T[] }. U proměnné typový argument napíšete:Truhla<number>. type Vysledek<T> = { ok: true; hodnota: T } | { ok: false; chyba: string };popisuje výsledek něčeho, co může selhat. Než použijetevysledek.hodnota, zkontrolujteif (vysledek.ok).- Omezení zužuje, co smí být typový parametr:
<T extends { sila: number }>. Uvnitř funkce je pakvec.siladovolené a výsledek si zachová celý typ, se kterým byla funkce zavolaná. keyof Schopnostije sjednocení klíčů typuSchopnosti. Funkce<K extends keyof Hrdina>(hrdina: Hrdina, klic: K): Hrdina[K]přečte vlastnost podle klíče a vrátí její přesný typ.
V příští lekci, Třídy, budete vytvářet objekty podle šablony: třída jednou popíše, co má každý hrdina nebo příšera a co umí, a TypeScript to celé zkontroluje.
Jak psát:
Pokyny
Teď si vše procvičte. Obchod prodává lektvary a zbraně, které jsou různých typů, ale obojí má vlastnost cena. V editoru najdete typ Vysledek z této lekce a zboží z obchodu. Regál se zbraněmi je dnes prázdný. Napište generickou funkci nejlevnejsi<T extends { cena: number }>(veci: T[]): Vysledek<T>. Pro prázdné pole selže s chybou "není co koupit". Jinak uspěje a hodnotou bude věc s nejnižší cenou.
Pomocí nejlevnejsi najděte nejlevnější lektvar. Když se to povede, vypište jeho jméno a kolik léčí, jinak vypište chybu:
Malý lektvar léčí 5Totéž udělejte pro zbraně: když nejlevnejsi uspěje, vypište jméno zbraně a její poskozeni, jinak Žádná zbraň: a chybu. Regál se zbraněmi je prázdný, takže program vypíše:
Malý lektvar léčí 5
Žádná zbraň: není co koupitZačněte programovat zdarma
9/9