W świecie programowania, termin „wyliczenia TypeScript” często pojawia się w dyskusjach na temat tego języka.
TypeScript, choć stosunkowo młody, zdobył uznanie programistów jako jeden z najbardziej popularnych języków. Stanowi on rozszerzenie (nadzbiór) JavaScript, co oznacza, że każdy poprawny kod JavaScript jest również ważny w TypeScript. Dodatkowo, TypeScript wprowadza możliwość pisania kodu ze statyczną kontrolą typów, czego brakowało w JavaScript.
Czym zatem dokładnie są wyliczenia w TypeScript? Jakie mają zastosowania i jak je tworzyć? Ten artykuł dostarczy Ci kompleksowej wiedzy na temat wyliczeń (ang. enums).
Czym są wyliczenia w TypeScript?
Wyliczenia, zwane również typami wyliczeniowymi, to struktury danych o ustalonej długości, które przechowują zbiór niezmiennych wartości, czyli stałych. TypeScript nie jest jedynym językiem, który oferuje wyliczenia; są one obecne również w językach obiektowych takich jak C# czy Java.
W TypeScript, wyliczenia umożliwiają programistom definiowanie zbioru odrębnych przypadków lub celów. Są szczególnie przydatne przy definiowaniu wartości lub właściwości, które mogą przyjmować tylko ograniczoną liczbę wartości. Weźmy za przykład kontynenty – na Ziemi jest ich tylko siedem.
Podsumowując, wyliczenia w TypeScript są ważne z kilku powodów:
- Zapewniają elastyczność, umożliwiając łatwe dokumentowanie i wyrażanie intencji oraz przypadków użycia przez programistów.
- Umożliwiają tworzenie wydajnych, niestandardowych stałych w JavaScript.
- Oszczędzają czas kompilacji i wykonania podczas przekształcania kodu TypeScript na JavaScript.
Wyliczenia w TypeScript mogą być numeryczne lub ciągowe. Należy jednak pamiętać, że są one wstępnie przetwarzane i nie podlegają testowaniu w fazie testowania. TypeScript przekształca wyliczenia na kod JavaScript.
Różne rodzaje wyliczeń w TypeScript
Teraz, gdy rozumiesz, czym są wyliczenia, przejdziemy do praktycznej demonstracji ich działania w TypeScript. Możesz skonfigurować środowisko deweloperskie, instalując TypeScript i Node.js lokalnie lub korzystając z platform online. My posłużymy się Playgroundem TypeScript, aby przedstawić różne rodzaje wyliczeń.
Oto różne typy wyliczeń w TypeScript:
#1. Wyliczenia numeryczne
Aby utworzyć wyliczenie, musisz użyć słowa kluczowego „enum”, po którym następuje nazwa wyliczenia. Elementy wyliczenia są definiowane w nawiasach klamrowych. Oto przykład wyliczenia numerycznego:
enum CardinalDirections { North = 5, East, South, West, };
Powyższy kod przedstawia wyliczenie o nazwie `CardinalDirections`, które zawiera cztery elementy. W tym przypadku wyliczenie jest idealne do przechowywania danych, ponieważ mogą istnieć tylko cztery wartości (Północ, Wschód, Południe i Zachód).
Zdefiniowaliśmy wartość `CardinalDirections.North` jako 5. Pozostałe wartości nie zostały przypisane, ponieważ TypeScript zrobi to automatycznie. Na przykład wartość `CardinalDirections.East` wyniesie 6, ponieważ TypeScript zwiększa poprzednią wartość o 1.
`CardinalDirections.West` będzie miało wartość 8.
A co się stanie, jeśli nie przypiszemy wartości do pierwszego elementu w nawiasach klamrowych? Nasze wyliczenie wyglądałoby tak:
enum CardinalDirections { North, East, South, West, };
TypeScript automatycznie przypisze wartość 0 do `North`. Jeśli wywołamy `CardinalDirections.West`, otrzymamy 3.
#2. Wyliczenia ciągów
Każdy element wyliczenia ciągu musi zostać zainicjowany innym elementem wyliczenia ciągu lub literałem ciągu. Oto przykład:
enum Direction { Up = "UP", Down = "DOWN", Left = "LEFT", Right = "RIGHT", }
To wyliczenie nie zwiększa się tak, jak to ma miejsce w przypadku wyliczeń numerycznych. Jeśli uruchomimy poniższy kod:
enum Direction { Up = "UP", Down = "DOWN", Left = "LEFT", Right = "RIGHT", } console.log(Direction.Right)
Otrzymamy wynik:
„RIGHT”
#3. Wyliczenia heterogeniczne
Można łączyć elementy numeryczne i łańcuchowe, tworząc wyliczenie heterogeniczne. Oto przykład:
enum HeterogeneousEnum { No = 0, Yes = "YES", }
#4. Stałe i obliczone elementy wyliczeniowe
Z elementami wyliczeniowymi związane są wartości, które mogą być „stałe” lub „obliczone”.
Oto przykład stałego wyliczenia:
enum E1 { X, Y, Z, }
W tym przypadku pierwszy element wyliczenia nie ma inicjalizatora, a TypeScript przypisuje mu wartość 0.
Możemy również rozważyć ten przykład:
enum E1 { X = 1, Y, Z, }
Jest to również wyliczenie stałe, ponieważ pierwszemu elementowi przypisano wartość, a do pozostałych stosuje się regułę inkrementacji.
Obliczone wyliczenia łączą elementy stałe i obliczone. Sprawdźmy poniższy przykład:
enum Color { Red = 100, Green = (Math.random() * 100), Blue = 200 }
Element wyliczeniowy „Blue” jest stałym elementem. Z drugiej strony element wyliczeniowy „Green” jest obliczany przy użyciu funkcji `Math.random()` w czasie wykonywania.
#5. Wyliczenia stałe
Wyliczenia stałe służą do zwiększenia wydajności wyliczeń numerycznych. W tym przypadku deklarujemy wyliczenie jako stałą.
Rozważmy kod przedstawiający dni tygodnia:
enum Weekday { Monday = 1, Tuesday, Wednesday, Thursday, Friday }
Jeśli wywołamy `console.log(Weekday.Thursday)`, otrzymamy odpowiedź 4. Natomiast, jeśli sprawdzimy kod JavaScript wygenerowany w czasie kompilacji, otrzymamy następujący kod:
"use strict"; var Weekday; (function (Weekday) { Weekday[Weekday["Monday"] = 1] = "Monday"; Weekday[Weekday["Tuesday"] = 2] = "Tuesday"; Weekday[Weekday["Wednesday"] = 3] = "Wednesday"; Weekday[Weekday["Thursday"] = 4] = "Thursday"; Weekday[Weekday["Friday"] = 5] = "Friday"; })(Weekday || (Weekday = {})); console.log(Weekday.Thursday);
Możemy zmodyfikować ten kod i zadeklarować „Weekday” jako stałą:
const enum Weekday { Monday = 1, Tuesday, Wednesday, Thursday, Friday }
Jeśli wywołamy teraz `console.log(Weekday.Thursday)`, kod JavaScript wygenerowany w czasie kompilacji będzie wyglądał tak:
"use strict"; console.log(4 /* Weekday.Thursday */);
Jak widać, kod JavaScript jest zoptymalizowany, gdy zadeklarujemy wyliczenie jako stałą.
#6. Wyliczenia otoczenia
Wyliczenia otoczenia używają słowa kluczowego „declare” do opisania struktury istniejących już typów wyliczeniowych. Spójrzmy na poniższy przykład:
declare enum Color { Red, Green, Blue }
Wyliczenia otoczenia są deklarowane poza modułami i mogą być wykorzystywane do tworzenia typów wielokrotnego użytku. Można je importować i używać w komponentach, pod warunkiem że zostały zadeklarowane globalnie.
Teraz, kiedy znasz różne typy wyliczeń w TypeScript, możemy pokazać, jak można z nich korzystać na różne sposoby. Poniższy kod będzie naszym punktem odniesienia:
enum Direction { North="N", East="E", South="S", West="W", };
Oto kilka przykładów zastosowań:
- Wyodrębnianie elementów wyliczeniowych. Na przykład, aby uzyskać dostęp do elementu „North”, możemy użyć:
`console.log(Direction.North); // Wynik: „N”`
- Używanie elementów wyliczeniowych. Możemy wybrać konkretny element wyliczeniowy, aby reprezentował określony kierunek. Na przykład:
const currentDirection = Direction.East; console.log(`The current direction is ${currentDirection}`);
Ten kod wyświetli: „The current direction is E”
Wyliczenia a mapy obiektów w TypeScript
Wyliczenia służą do reprezentowania ograniczonego zbioru wartości, takich jak kolory tęczy czy dni tygodnia. Są one silnie typowane, co oznacza, że błędy są wychwytywane już na etapie pisania kodu. Przykład wyliczenia w TypeScript:
enum Color { Red, Green, Blue, }
Mapy obiektów (słowniki lub pary klucz-wartość) służą do przechowywania i pobierania wartości powiązanych z określonymi kluczami. Mapy obiektów w TypeScript mogą przechowywać dane dowolnego typu. Nie są jednak one ściśle typowane, więc błędy typów mogą nie być wychwytywane podczas pisania kodu. Przykład mapy obiektów z tymi samymi kolorami:
const colors = { red: "FF0000", green: "00FF00", blue: "0000FF", };
Główne różnice między wyliczeniami a mapami obiektów w TypeScript to:
- Wyliczenia są ściśle typowane, podczas gdy mapy obiektów nie są.
- Wyliczenia są „typem”, podczas gdy mapy obiektów są strukturą danych.
- Wyliczenia nie są elastyczne, a mapy obiektów są elastyczne.
Najlepsze praktyki używania wyliczeń w TypeScript
Jak już wspomnieliśmy, TypeScript nie jest jedynym językiem programowania, który oferuje wyliczenia. Stosowanie najlepszych praktyk gwarantuje, że napiszesz czysty, zoptymalizowany i wolny od błędów kod. Oto kilka dobrych praktyk podczas tworzenia i używania wyliczeń w TypeScript:
- Zaczynaj nazwy wyliczeń od wielkiej litery: pierwsze słowo w nazwie wyliczenia powinno zawsze zaczynać się wielką literą. Na przykład, lepiej użyć wyliczenia „Number” niż „number”.
- Używaj wyliczeń dla stałych: wyliczenia najlepiej nadają się do deklarowania stałego zestawu powiązanych elementów. Na przykład tydzień może mieć tylko 7 dni. Elementy wyliczenia nigdy nie powinny zmieniać się w czasie wykonywania.
- Unikaj nadużywania wyliczeń: Nowo poznane koncepcje mogą kusić do stosowania ich w całym projekcie. Jednak z wyliczeniami TypeScript należy postępować z umiarem. Wyliczenia są dobrym wyborem, gdy chcemy utrzymać kod czytelnym.
- Traktuj wyliczenia jako wyliczenia: wyliczenia TypeScript można wykorzystywać do różnych celów. Najlepiej jednak używać ich do reprezentowania tylko wyliczeń, a nie innych struktur danych.
- Unikaj automatycznych wyliczeń: TypeScript przypisuje wartości elementom wyliczeń, jeśli nie zrobisz tego jawnie. Podawaj wartości wyliczeniowe i unikaj nieoczekiwanego zachowania w czasie wykonywania kodu.
- Dokumentuj wyliczenia: zawsze dokumentuj swój kod, aby był zrozumiały. Wyjaśnij, co robi dane wyliczenie i dlaczego jest to najlepsze rozwiązanie.
Warto również zapoznać się z najlepszymi bibliotekami TypeScript i środowiskiem wykonawczym, aby stać się lepszym programistą.
Podsumowanie
W tym artykule omówiliśmy definicję wyliczeń w TypeScript, różne ich typy oraz przykłady zastosowań. TypeScript przydaje się, gdy zależy nam na przejrzystości kodu. Są jednak sytuacje, w których należy unikać wyliczeń i zastępować je obiektami.
Na przykład, nie należy stosować wyliczeń dla wartości dynamicznych. Wyliczenia nie mogą być również używane jako zmienne, ponieważ spowoduje to błędy w programie.
Jeśli nadal masz wątpliwości, możesz dowiedzieć się więcej o różnicach między TypeScript a JavaScript.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.