Návod, jak s tím pracovat

TypeScript představuje rozšíření JavaScriptu, které přináší výhody statické typové kontroly do vývoje.

Díky TypeScriptu je možné odhalit a opravit chyby již v rané fázi vývoje. Mezi klíčové prvky TypeScriptu patří výčty (Enums). Enum je oblíbená konstrukce, která umožňuje psát bezpečnější kód.

Tento článek se zaměří na vysvětlení konceptu výčtů, jejich tvorbu, využití a další aspekty, které je třeba vzít v úvahu.

Co je to Enum?

Enum, neboli výčet, je datový typ, který definuje množinu pojmenovaných hodnot. Proměnná tohoto typu může nabývat pouze jedné z těchto předem definovaných hodnot, často označovaných jako členy nebo prvky výčtu.

V tomto textu budeme pro tyto hodnoty používat termín „členy“. Výčty nejsou výhradní vlastností TypeScriptu; vyskytují se i v jiných programovacích jazycích. Použití výčtů v TypeScriptu významně zvyšuje typovou bezpečnost programů.

Dále si přečtěte: Nejlepší knihovny a běhová prostředí pro TypeScript, které by měl každý vývojář znát

Proč používat výčty?

Výčty poskytují mechanismus pro definování povolených hodnot proměnné nebo argumentu funkce. Díky tomu mají vývojáři jistotu, že jsou proměnným a argumentům funkcí předávány pouze očekávané hodnoty. To pomáhá eliminovat chyby a umožňuje psát robustnější a spolehlivější kód.

Předpoklady pro práci s výčty

V tomto návodu si ukážeme praktické využití výčtů v TypeScriptu. Pro plynulé sledování tohoto návodu je nutné mít možnost spouštět kód v TypeScriptu.

Z tohoto důvodu je nezbytné mít nainstalované Node.js pro běh JavaScript kódu. Pokud nemáte nainstalovaný TypeScript, můžete využít níže uvedený videonávod pro jeho instalaci.

Alternativně, pro okamžitou kompilaci a spuštění skriptu, můžete použít nástroj ts-node. Přestože ho budu používat v tomto článku, pro rozsáhlejší projekty doporučuji standardní instalaci TypeScriptu. Pro spuštění skriptu pomocí ts-node použijte příkaz:

npx ts-node <název_skriptu>

Tento článek předpokládá základní znalost JavaScriptu a TypeScriptu.

Práce s jednoduchým výčtem

Jak vytvořit jednoduchý výčet

V TypeScriptu se výčty tvoří pomocí klíčového slova enum. Po něm následuje název výčtu a seznam jeho členů. Níže je příklad deklarace výčtu reprezentujícího čtyři světové strany.

enum Direction {
    North,
    East,
    South,
    West
}

Důležité je, že členové výčtu nejsou obklopeni uvozovkami, nejedná se tedy o řetězce.

Jak používat jednoduchý výčet

Hodnotu výčtu přiřadíte proměnné následovně:

const heading: Direction = Direction.North;

Protože typ proměnné je zřejmý z přiřazení hodnoty, TypeScript si ho dokáže odvodit. Díky tomu není nutné explicitně specifikovat typ proměnné, můžeme tedy napsat:

const heading = Direction.North;

Pro zobrazení hodnoty proměnné heading ji můžeme vypsat do konzole.

console.log(heading);

Výstup bude:

0

Proměnná heading má hodnotu nula, přestože jsme jí přiřadili Direction.North. To je dáno tím, že při vytvoření výčtu je každému členu implicitně přiřazena číselná hodnota. První člen má hodnotu 0, druhý 1 a tak dále. Zde je příklad:

console.log(Direction.North, Direction.East, Direction.South, Direction.West)

Lze tedy ověřit, zda proměnná heading obsahuje hodnotu „North“ tak, že zkontrolujeme, zda se rovná nule. Například:

// Kontrola rovnosti
let isNorth = heading == 0;

// Výpis výsledku
console.log(isNorth);

Jak bylo ukázáno výše, Direction.North se rovná 0. Namísto porovnávání směru s nulou můžeme tedy porovnat směr s Direction.North.

// Kontrola, zda je směr North
isNorth = heading == Direction.North;

// Výpis výsledku
console.log(isNorth);

Tento přístup je obecně užitečný a tak se pravděpodobně budou výčty nejčastěji používat. Výčty ale nabízejí více funkcionality, jak uvidíme dále. Následující část se zaměří na možnost definování vlastních hodnot.

Práce s vlastními hodnotami

TypeScript automaticky přiřazuje členům výčtu číselné hodnoty začínající nulou. Nicméně, je možné přiřadit členům výčtu vlastní hodnoty. To se provádí takto:

enum StarRating {
    VeryPoor = 1,
    Poor = 2,
    Average = 3,
    Good = 4,
    Excellent = 5
}

Alternativně, můžete postupovat následujícím způsobem:

enum StarRating {
    VeryPoor = 1,
    Poor,
    Average,
    Good,
    Excellent
}

V tomto případě bude prvnímu členu přiřazena hodnota 1. Následné členy automaticky získají hodnoty o jedničku vyšší než předchozí člen. Tedy „Poor“ bude 2, „Average“ 3 a tak dále.

Členové výčtu nemusí vždy nabývat číselné hodnoty, jak si ukážeme dále. Členové s číselnými hodnotami se však chovají jako běžná čísla.

console.log(typeof StarRating.Average);

Výstupem bude „number“. To znamená, že můžete provádět všechny běžné číselné operace, včetně porovnávání:

console.log(StarRating.Excellent > StarRating.Average)

Výstupem bude „true“.

Použití řetězců jako vlastních hodnot

Jak již bylo zmíněno, členové výčtu mohou nabývat i řetězcové hodnoty. Toho se dosahuje takto:

enum Choice {
    RedPill = "Know Everything",
    BluePill = "Know Nothing"
}

V tomto případě se členové výčtu chovají podobně jako v předchozím příkladu, ale protože jejich hodnoty jsou řetězce, lze provádět řetězcové operace, nikoli číselné.

Heterogenní výčty

Lze také kombinovat řetězcové a číselné hodnoty. Přestože to není příliš užitečné, je to technicky možné.

enum Mixed {
    First = "String",
    Second = 2
}

Závěrečná slova

V tomto článku jsme prozkoumali, co jsou výčty v TypeScriptu a proč jsou užitečné. Také jsme si ukázali různé typy hodnot, které mohou členové výčtu nabývat.

Dále doporučuji přečíst si náš článek o Type vs. Interface v TypeScriptu.