Shrnutí

V této lekci jste se naučili, že:

  • Rozlišené sjednocení je sjednocení typů objektů se společnou vlastností, značkou, třeba druh, která má v každém typu jiný literálový typ: type Predmet = { druh: "lektvar"; leceni: number } | { druh: "zbran"; poskozeni: number };. Kontrola značky, if (predmet.druh === "lektvar"), typ zúží. TypeScript kontroluje vlastnosti každého druhu a zachytí druhy s překlepem.
  • switch (predmet.druh) skočí na case se stejnou hodnotou; ukončí ho break nebo return a bez nich program propadne do dalšího případu. default zachytí zbytek. Každý case typ zúží.
  • Kontrola úplnosti ve větvi default, const neosetreny: never = predmet; return neosetreny;, zařídí, že TypeScript ohlásí každý switch, kterému chybí případ pro nějaký druh, a ten druh pojmenuje. never je typ bez hodnot.
  • Record<Vzacnost, number> je objekt, který má přesně klíče z typu Vzacnost a u každého z nich číslo. Chybějící klíč je chyba a hodnotu přečte ceny[predmet.vzacnost].
  • const vsechnaPovolani = ["valecnik", "mag"] as const; je seznam přesných hodnot jen pro čtení a (typeof vsechnaPovolani)[number] z něj udělá sjednocení, takže seznam a typ si vždycky odpovídají.
  • Rozlišené sjednocení umí popsat i stavy jedné věci, každý s vlastními daty: odměnu má jen úkol se stav: "splneny".
  • Místo boolean s nepovinnými vlastnostmi napište sjednocení, aby nemožné kombinace nešly zapsat. Značkou může být i boolean: { jeZamcena: false } | { jeZamcena: true; nazevKlice: string }.

V příští lekci, Generika, se naučíte psát funkce a typy, které fungují s jakýmkoli typem, a TypeScript přitom pořád ví, o jaký typ jde: funkci, která vrátí první prvek libovolného pole, nebo truhlu, do které se vejde jakákoli kořist. A uvidíte, jak fungují typy se špičatými závorkami, jako je Record.

Pokyny

Teď si vše procvičte. Kiřina výprava v editoru je seznam událostí: bojů, pokladů a odpočinků. Spusťte program: kontrola úplnosti ohlásí druh, který nemá svůj případ. Doplňte ho: u odpočinku vrátí popisUdalosti text Kira odpočívá u ohně. Program pak vypíše:

Kira bojuje: vlk (+20 zkušeností)
Kira najde 35 zlatých
Kira odpočívá u ohně
Kira bojuje: skřet (+15 zkušeností)

Pod cyklem vytvořte const pocty: Record<"boj" | "poklad" | "odpocinek", number> se všemi počty na 0 a spočítejte v ní události každého druhu.

Sečtěte také zkušenosti z bojů a zlato z pokladů. Na konci vypište počty a součty:

Kira bojuje: vlk (+20 zkušeností)
Kira najde 35 zlatých
Kira odpočívá u ohně
Kira bojuje: skřet (+15 zkušeností)
Boje: 2, poklady: 1, odpočinky: 1
Zkušenosti: 35, zlato: 35

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/8