A TypeScript felsorolt típusa praktikus módja a kapcsolódó értékek csomagolásának, egyértelmű jelentéssel.
Az enum vagy egy felsorolt típus olyan adatstruktúra, amely lehetővé teszi elnevezett értékek készletének meghatározását.
Az enumok lehetőséget biztosítanak egy rögzített értékkészlet állandóként való megjelenítésére. Segíthetnek a kód kifejezőbbé és öndokumentálóbbá tételében azáltal, hogy értelmes neveket adnak bizonyos értékeknek. Itt megtudhatja, hogyan használhatja az enumokat TypeScriptben.
Enum létrehozása
Az enumok általában meghatározott számú opciót jelentenek egy adott értékhez. Például az elsődleges színeket képviselő enum rendelkezhet rögzített értékekkel a Piros, a Sárga és a Kék számára.
Az enumok az adatokat kulcs/érték párok halmazaként képviselik, amelyeket enum tagoknak nevezünk. A kulcsnak mindig karakterláncnak kell lennie. Az érték azonban – alapértelmezés szerint automatikusan növekvő szám – lehet numerikus, karakterlánc vagy számított.
Létrehozhat egy enumot
a TypeScript nyelvet használni a enum kulcsszó. Kövesse az enum nevével és egy pár göndör kapcsos zárójellel ({}) tartalmazza az enum tagokat. Általános JavaScript elnevezési konvenció kimondja, hogy az enumneveknek nagybetűvel kell kezdődniük.enum Irány {
Fel,
Le,
Bal,
Jobb
}
Ebben a példában egy enum szerepel Irány. Az enumnak van egy tagja, amely minden irányt képvisel: fel, le, balra és jobbra.
Mivel ez a kód nem ad meg értéket az egyes kulcsokhoz, a TypeScript automatikusan hozzárendeli az értékeket. Az első tag, az Up értéke 0 lesz. A fennmaradó tagok mindegyikének értéke 1-gyel nagyobb, mint az előző tagé. Ezt kifejezetten kijelentheti, ha nehezen emlékszik:
enum Irány {
Fel = 0,
Le = 1,
Bal = 2,
Jobb = 3,
}
Vagy kifejezetten deklarálhat különböző értékeket, így a deklarálatlan értékeket továbbra is a korábbiak szerint kell növelni:
enum Állapot {
Aktív = 9,
inaktív, // 10
}
Ebben a példában az Inaktív tag értéke 10. Ez a viselkedés azokra az enumokra vonatkozik, amelyek csak numerikus értékeket tartalmaznak, a karakterláncot vagy heterogén tagokat nem.
Az enum különböző típusai
A TypeScript enjeinek van egy implicit típusuk, amelyek a tagjaik által birtokolt értékek típusán alapulnak. A legelterjedtebb típus a numerikus enum, amelynek viselkedését az előző rész tárgyalja, de két változata létezik.
String Enums
A string enum olyan enum, amelyben minden tagja karakterlánc. A numerikus felsorolásokkal ellentétben, ahol az értékek automatikusan hozzárendelődnek, minden tagot inicializálnia kell egy karakterlánccal:
enum Elsődleges színek {
Piros = "PIROS",
Sárga = "SÁRGA",
Kék = "KÉK"
}
Bár a karakterlánc-enumoknak nincs automatikusan növekvő tulajdonsága, értelmesebbek lehetnek, ha sorba rendezi őket. Értékeiknek továbbra is leíró jellegűnek kell lenniük, tagnevek nélkül, míg a numerikus értékek halmaza nem feltétlenül önleíró.
Heterogén enumok
A heterogén enumok olyan enumok, amelyek numerikus és karakterlánctagokat is tartalmaznak. Például:
enum Eredmény {
Siker = "SIKER",
Sikertelenség = 0
}
A heterogén enumok akkor hasznosak, ha vannak olyan enum-tagok, amelyekhez az egyes tagok konkrét kontextusa vagy jelentése alapján különböző értéktípusok szükségesek. Azonban a TypeScript dokumentáció visszatartja a heterogén enumok használatát, mivel bonyolultabbá teszik a kódot, ami hibásabbá teheti.
Számított és állandó enum tagok
Minden enumtagnak van egy értéke, amely lehet állandó vagy kiszámított.
Állandó Enum tagok
Egy enum tag állandó, ha megfelel az alábbi feltételek bármelyikének.
- Ez az enum első tagja, és nincs inicializálója.
- Nincs inicializálója, és az azt megelőző enum tag egy numerikus konstans volt.
- Egy konstans enum kifejezéssel inicializálódik.
A TypeScript-dokumentáció szerint a konstans enum-kifejezés a TypeScript-kifejezések olyan részhalmaza, amely fordításkor teljes mértékben kiértékelhető. Például egy karakterlánc vagy egy numerikus literál.
Például az alábbi kódblokkban lévő enumok tagjai mind állandóak:
// 1. ESET
enum Irány {
Fel,
Le,
Bal,
Jobb
}// 2. ESET
enum hétköznap {
hétfő = 1,
Kedd,
Szerda,
Csütörtök,
péntek
}
// 3. ESET
enum Évad {
Tavasz = "TAVASZI",
Nyár = "NYÁR",
Ősz = "ŐSZ",
Tél = "TÉLI"
}
Amikor a konstans enum tagokat sima JavaScript-be ülteti át, a generált kód ezek literális értékeit használja. Ez előnyös lehet a teljesítmény szempontjából, és megkönnyíti a hibakeresést.
Íme például a Szezon enum lefordított változata:
var Évad;
(funkció (Évad) {
Évad["Tavaszi"] = "TAVASZI";
Évad["Nyár"] = "NYÁR";
Évad["Ősz"] = "ŐSZ";
Évad["Téli"] = "TÉLI";
})(Évad || (Évad = {}));
Számított enum-tagok
Számított enum-tagok segítségével értékeket rendelhet az enum-tagokhoz kifejezések vagy egyéb dinamikus számítások alapján. Például:
enum Méret {
Kicsi = 1,
Közepes = kalkulálSize(12),
nagy = kalkulálSize(5)
}funkciószámítsa Méret(érték: szám): szám{
Visszatérés érték * 5;
}
konzol.log (Méret. Nagy)
A Méret Az enumnak három tagja van: Kicsi, Közepes, és Nagy. Kifejezetten 1 értéket rendel a kis taghoz. A Közepes és Nagy a tagok függvényt használnak számítsa Méret futás közbeni értékük kiszámításához.
Ha kiszámított enum-tagokkal dolgozik, fontos megjegyezni, hogy az értékek futásidőig nem ismertek. Ez több bonyolultságot és potenciált jelenthet futásidejű hibák konstans értékű enum tagokhoz képest.
Például:
var Méret;
(funkció (Méret) {
Méret[Méret["Kicsi"] = 1] = "Kicsi";
Méret[Méret["Közepes"] = számíts mérete(12)] = "Közepes";
Méret[Méret["Nagy"] = számíts mérete(5)] = "Nagy";
})(Méret || (Méret = {}));
konzol.log(Méret.Nagy)
A fenti kódblokk a Méret enum. Figyelje meg, hogy a TypeScript nem tartalmazza a számítási méret() visszatérési értékeit a JavaScript-kódban. Ehelyett tartalmazza az eredeti függvényhívást, így a JavaScript futás közben határozza meg az értékeket.
Az Enum Values elérése
Az enum tagok értékeit az objektumpont jelöléssel érheti el.
Például:
enum Irány {
Fel = 0,
Le = 1,
Bal = 2,
Jobb = 3,
}
konzol.log (Irány. Bal) // 2
Reverse Mapping Numeric Enums
A numerikus enumokban a fordított leképezés arra utal, hogy a megfelelő enum tag neve lekérhető az értékéből. Ez különösen akkor lehet hasznos, ha numerikus értékekkel dolgozik, amelyeket esetleg dekódolni kell.
Alapértelmezés szerint a TypeScript enumértékei előre leképezve vannak, ami azt jelenti, hogy csak a névhez társított értékhez férhet hozzá. Azonban manuálisan is végrehajthat fordított leképezést az enum tag lekéréséhez az értéke alapján.
Például:
enum Irány {
Fel = 1,
Le,
Bal,
Jobb
}funkciógetDirectionName(irányérték: szám): húr{
// Fordított leképezés
const irányNév = Irány[irányérték];
Visszatérés directionName;
}
konzol.log (getDirectionName(1)); // "Fel"
konzol.log (getDirectionName(3)); // "Bal"
Ez getDirectionName A függvény fordított leképezést hajt végre az enum tag nevéhez való hozzáféréssel, annak értékét indexként használva. A függvény a irányérték argumentumként, és lekéri a megfelelő enum tag nevét a segítségével Irány[irányérték].
A fordított leképezés hasznos lehet olyan esetekben, amikor számértékkel rendelkezik, és meg kell határoznia a megfelelő enum tag nevét. Kényelmes módot biztosít az enumokkal való munkavégzéshez előre és hátrafelé egyaránt.
Az Enumsnak számos alkalmazása létezik
Az enumokat különféle forgatókönyvekben használhatja, például a kapcsolók utasításainak kezelésében, a függvényparaméterek meghatározásában, az adatok leképezésében, valamint a választási lehetőségek vagy beállítások megjelenítésében.
Akár véges opcióhalmazt kell képviselnie, akár összetett állapotátmeneteket kell kezelnie, a TypeScript enumjai értékes eszközt jelentenek a kód egyértelműségének és szerkezetének javítására.