Vymenovaný typ TypeScript je praktický spôsob balenia súvisiacich hodnôt s jasným významom.
Enum alebo enumerovaný typ je dátová štruktúra, ktorá vám umožňuje definovať množinu pomenovaných hodnôt.
Enumy poskytujú spôsob, ako reprezentovať pevnú množinu hodnôt ako konštanty. Môžu prispieť k tomu, aby bol váš kód výraznejší a dokumentačný tým, že konkrétnym hodnotám dávajú zmysluplné názvy. Tu sa dozviete, ako môžete použiť enum v TypeScript.
Vytvorenie Enum
Enumy vo všeobecnosti predstavujú pevný počet možností pre danú hodnotu. Napríklad zoznam reprezentujúci primárne farby môže mať pevné hodnoty pre červenú, žltú a modrú.
Výčty predstavujú údaje ako množinu párov kľúč/hodnota známych ako členovia výčtu. Kľúč musí byť vždy reťazec. Hodnota – predvolene automaticky sa zvyšujúce číslo – však môže byť číselná, reťazcová alebo vypočítaná.
Môžete vytvoriť zoznam v jazyk TypeScript pomocou enum kľúčové slovo. Nasledujte ho s názvom enum a párom zložených zátvoriek ({}), ktorý obsahuje zoznam členov.
Bežná konvencia pomenovávania JavaScriptu uvádza, že menové mená by mali začínať veľkým písmenom.enum Smer {
hore,
dole,
vľavo,
Správny
}
Tento príklad obsahuje enum tzv Smer. Enum má člena reprezentujúceho každý smer: hore, dole, vľavo a vpravo.
Keďže tento kód nešpecifikuje hodnotu pre každý z kľúčov, TypeScript automaticky priradí hodnoty. Prvý člen, Up, bude mať hodnotu 0. Zostávajúci členovia budú mať hodnotu o 1 väčšiu ako predchádzajúci člen. Môžete to výslovne deklarovať, ak je pre vás ťažké si zapamätať:
enum Smer {
Hore = 0,
Dole = 1,
Vľavo = 2,
Správne = 3,
}
Alebo môžete explicitne deklarovať iné hodnoty a ponechať nedeklarované hodnoty, aby sa naďalej zvyšovali ako predtým:
enum Postavenie {
Aktívne = 9,
neaktívne, // 10
}
V tomto príklade má neaktívny člen hodnotu 10. Toto správanie sa vzťahuje na enumy, ktoré majú iba číselné hodnoty, nie na tie s reťazcami alebo heterogénnymi členmi.
Rôzne typy enum
Enumy v TypeScripte majú implicitný typ, ktorý je založený na type hodnôt, ktoré ich členovia držia. Najbežnejším typom je číselný zoznam, ktorého správanie sa zaoberá predchádzajúca časť, existujú však dve variácie.
Výčty reťazcov
Reťazec enum je enum, v ktorom sú všetky jeho členy reťazce. Na rozdiel od číselných zoznamov, kde sa hodnoty priraďujú automaticky, musíte každý člen inicializovať reťazcom:
enum Primárne farby {
Červená = "ČERVENÁ",
Žltá = "ŽLTÁ",
Modrá = "MODRÁ"
}
Hoci výčty reťazcov nemajú vlastnosti automatického zvyšovania, môžu mať väčší zmysel, ak ich serializujete. Ich hodnoty by mali byť stále popisné, bez názvov členov, zatiaľ čo množina číselných hodnôt nemusí byť samoopisná.
Heterogénne enumy
Heterogénne enumy sú enumy, ktoré obsahujú číselné aj reťazcové členy. Napríklad:
enum výsledok {
Úspech = "ÚSPECH",
Zlyhanie = 0
}
Heterogénne enumy sú užitočné, keď máte enumové členy, ktoré vyžadujú rôzne typy hodnôt na základe špecifického kontextu alebo významu každého člena. Avšak, Dokumentácia TypeScript odrádza od používania heterogénnych enumov, pretože zavádzajú zložitosť, ktorá môže spôsobiť, že váš kód bude náchylnejší na chyby.
Vypočítaný a konštantný počet členov
Každý člen enum má hodnotu, ktorá môže byť konštantná alebo vypočítaná.
Konštantný počet členov
Člen enum je konštantný, ak spĺňa niektorú z nižšie uvedených podmienok.
- Je to prvý člen enum a nemá žiadny inicializátor.
- Nemá inicializátor a predchádzajúci člen enum bola číselná konštanta.
- Inicializuje sa konštantným enumovým výrazom.
Podľa dokumentácie TypeScript je výraz konštantného enum podmnožinou výrazov TypeScript, ktoré možno plne vyhodnotiť v čase kompilácie. Napríklad reťazec alebo číselný literál.
Napríklad všetky členy enumov v bloku kódu nižšie sú konštantné:
// PRÍPAD 1
enum Smer {
hore,
dole,
vľavo,
Správny
}// PRÍPAD 2
enum Pracovný deň {
pondelok = 1,
utorok,
streda,
štvrtok,
piatok
}
// PRÍPAD 3
enum Sezóna {
Jar = "JAR",
Leto = "LETO",
jeseň = "JESEŇ",
Zima = "ZIMA"
}
Keď transpilujete konštantné členy enum do obyčajného JavaScriptu, vygenerovaný kód použije ich doslovné hodnoty. To môže byť prospešné pre výkon a zjednodušiť ladenie.
Tu je napríklad preložená verzia zoznamu sezón:
var Sezóna;
(funkciu (Sezóna) {
sezóna["Jar"] = "JAR";
sezóna["Leto"] = "LETO";
sezóna["jeseň"] = "JESEŇ";
sezóna["zima"] = "ZIMA";
})(Sezóna || (Sezóna = {}));
Vypočítaný počet členov
Vypočítané členy enum môžete použiť na priradenie hodnôt členom enum na základe výrazov alebo iných dynamických výpočtov. Napríklad:
enum Veľkosť {
Malý = 1,
Stredné = vypočítaťVeľkosť(12),
Veľké = vypočítaťVeľkosť(5)
}funkciuvypočítaťVeľkosť(hodnota: číslo): číslo{
vrátiť hodnota * 5;
}
konzoly.log (veľk. Veľký)
The Veľkosť enum má troch členov: Malý, Stredná, a Veľký. Explicitne priradí hodnotu 1 členovi Small. The Stredná a Veľký členovia používajú funkciu vypočítaťVeľkosť na výpočet ich hodnôt za behu.
Pri práci s vypočítanými členmi enumu je dôležité poznamenať, že hodnoty nie sú známe až do spustenia. To môže priniesť väčšiu zložitosť a potenciál runtime chyby v porovnaní s členmi enum s konštantnými hodnotami.
Napríklad:
var Veľkosť;
(funkciu (Veľkosť) {
Veľkosť[Veľkosť["malý"] = 1] = "malý";
Veľkosť[Veľkosť["stredne"] = vypočítaťVeľkosť(12)] = "stredne";
Veľkosť[Veľkosť["Veľký"] = vypočítaťVeľkosť(5)] = "Veľký";
})(Veľkosť || (Veľkosť = {}));
konzoly.log(Veľkosť.Veľký)
Vyššie uvedený blok kódu je preložená verzia súboru Veľkosť enum. Všimnite si, že TypeScript nezahŕňa vrátené hodnoty z countSize() v kóde JavaScript. Namiesto toho obsahuje pôvodné volanie funkcie, takže JavaScript určuje hodnoty za behu.
Prístup k hodnotám Enum
K hodnotám členov enum môžete pristupovať pomocou bodkovej notácie objektu.
Napríklad:
enum Smer {
Hore = 0,
Dole = 1,
Vľavo = 2,
Správne = 3,
}
konzoly.log (Smer. vľavo) // 2
Obrátené mapovanie číselných čísel
Spätné mapovanie v číselných výčtoch sa týka schopnosti získať zodpovedajúci názov člena výčtu z jeho hodnoty. To môže byť užitočné najmä pri práci s číselnými hodnotami, ktoré možno budete musieť dekódovať.
V predvolenom nastavení sú hodnoty enum v TypeScript mapované dopredu, čo znamená, že máte prístup iba k hodnote priradenej k názvu. Môžete však manuálne vykonať spätné mapovanie na získanie člena enum na základe jeho hodnoty.
Napríklad:
enum Smer {
Hore = 1,
dole,
vľavo,
Správny
}funkciugetDirectionName(directionValue: číslo): reťazec{
// Obrátené mapovanie
konšt directionName = Smer[directionValue];
vrátiť directionName;
}
konzoly.log (getDirectionName(1)); // "Hore"
konzoly.log (getDirectionName(3)); // "Doľava"
Toto getDirectionName funkcia vykoná spätné mapovanie prístupom k názvu člena enum pomocou jeho hodnoty ako indexu. Funkcia trvá a directionValue ako argument a získa zodpovedajúci názov člena enum pomocou Smer[directionValue].
Spätné mapovanie môže byť užitočné v scenároch, kde máte číselnú hodnotu a potrebujete určiť zodpovedajúci názov člena enum. Poskytuje pohodlný spôsob práce s enumami v smere dopredu aj dozadu.
Existuje veľa aplikácií enumov
Výčty môžete použiť v rôznych scenároch, ako je napríklad spracovanie príkazov prepínača, definovanie parametrov funkcií, mapovanie údajov a reprezentovanie volieb alebo nastavení.
Či už potrebujete reprezentovať konečnú množinu možností alebo spravovať zložité prechody stavov, zoznamy v TypeScript sú cenným nástrojom na zlepšenie prehľadnosti a štruktúry vášho kódu.