Typ wyliczeniowy TypeScript to wygodny sposób pakowania powiązanych wartości z jasnym znaczeniem.

Wyliczenie lub typ wyliczeniowy to struktura danych, która umożliwia zdefiniowanie zestawu nazwanych wartości.

Wyliczenia zapewniają sposób reprezentowania stałego zestawu wartości jako stałych. Mogą sprawić, że Twój kod będzie bardziej wyrazisty i samodokumentujący się, nadając sensowne nazwy określonym wartościom. Tutaj dowiesz się, jak możesz używać wyliczeń w TypeScript.

Tworzenie wyliczenia

Wyliczenia ogólnie reprezentują ustaloną liczbę opcji dla danej wartości. Na przykład wyliczenie reprezentujące kolory podstawowe może mieć ustalone wartości dla koloru czerwonego, żółtego i niebieskiego.

Wyliczenia reprezentują dane jako zestaw par klucz/wartość, znanych jako elementy wyliczeniowe. Klucz musi zawsze być łańcuchem. Jednak wartość — domyślnie liczba automatycznie zwiększająca się — może być liczbowa, łańcuchowa lub obliczona.

Możesz utworzyć wyliczenie w język TypeScript używając wyliczenie

instagram viewer
słowo kluczowe. Podążaj za nim nazwą wyliczenia i parą nawiasów klamrowych ({}) zawierające członków enum. Powszechna konwencja nazewnictwa JavaScript stwierdza, że ​​nazwy enum powinny zaczynać się od dużej litery.

wyliczenie Kierunek {
W górę,
W dół,
Lewy,
Prawidłowy
}

Ten przykład zawiera wyliczenie o nazwie Kierunek. Wyliczenie ma członka reprezentującego każdy kierunek: w górę, w dół, w lewo i w prawo.

Ponieważ ten kod nie określa wartości dla każdego z kluczy, TypeScript automatycznie przypisze wartości. Pierwszy element, Up, będzie miał wartość 0. Każdy z pozostałych członków będzie miał wartość o 1 większą niż poprzedni członek. Możesz to wyraźnie zadeklarować, jeśli masz trudności z zapamiętaniem:

wyliczenie Kierunek {
w górę = 0,
W dół = 1,
Lewy = 2,
Prawo = 3,
}

Lub możesz jawnie zadeklarować różne wartości, pozostawiając niezadeklarowane wartości, aby kontynuować zwiększanie, jak poprzednio:

wyliczenie stan {
aktywny = 9,
Nieaktywny, // 10
}

W tym przykładzie nieaktywny element członkowski ma wartość 10. To zachowanie dotyczy wyliczeń, które mają tylko wartości liczbowe, a nie te z ciągami lub heterogenicznymi elementami członkowskimi.

Różne rodzaje wyliczeń

Wyliczenia w TypeScript mają niejawny typ, który opiera się na typie wartości przechowywanych przez ich członków. Najpopularniejszym typem jest wyliczenie liczbowe, którego zachowanie omówiono w poprzedniej sekcji, ale istnieją dwie odmiany.

Wyliczenia ciągów

Wyliczenie łańcuchowe to wyliczenie, w którym wszyscy jego członkowie są łańcuchami. W przeciwieństwie do wyliczeń liczbowych, w których wartości są przypisywane automatycznie, musisz zainicjować każdy element łańcuchem:

wyliczenie Kolory podstawowe {
czerwony = "CZERWONY",
Żółty = "ŻÓŁTY",
niebieski = "NIEBIESKI"
}

Chociaż ciągi wyliczeniowe nie mają właściwości autoinkrementacji, mogą mieć większy sens, jeśli je serializujesz. Ich wartości nadal powinny być opisowe, bez nazw elementów członkowskich, podczas gdy zestaw wartości liczbowych może nie być samoopisujący.

Wyliczenia heterogeniczne

Heterogeniczne wyliczenia to wyliczenia, które zawierają zarówno elementy numeryczne, jak i łańcuchowe. Na przykład:

wyliczenie Wynik {
Sukces = "POWODZENIE",
porażka = 0
}

Heterogeniczne wyliczenia są przydatne, gdy masz elementy wyliczeniowe, które wymagają różnych typów wartości na podstawie określonego kontekstu lub znaczenia każdego elementu członkowskiego. Jednakże Dokumentacja TypeScriptu odradza stosowanie heterogenicznych wyliczeń, ponieważ wprowadzają one złożoność, która może sprawić, że kod będzie bardziej podatny na błędy.

Obliczeni i stali członkowie wyliczeniowi

Każdy element członkowski enum ma wartość, która może być stała lub obliczona.

Stała liczba członków

Element wyliczeniowy jest stały, jeśli spełnia którykolwiek z poniższych warunków.

  1. Jest pierwszym członkiem wyliczenia i nie ma inicjatora.
  2. Nie ma inicjatora, a poprzedzający element członkowski enum był stałą numeryczną.
  3. Jest inicjowany stałym wyrażeniem enum.

Zgodnie z dokumentacją TypeScript, stałe wyrażenie wyliczeniowe jest podzbiorem wyrażeń TypeScript, które można w pełni ocenić w czasie kompilacji. Na przykład ciąg znaków lub literał liczbowy.

Na przykład elementy wyliczeniowe w poniższym bloku kodu są stałe:

// PRZYPADEK 1
wyliczenie Kierunek {
W górę,
W dół,
Lewy,
Prawidłowy
}

// PRZYPADEK 2
wyliczenie dzień powszedni {
poniedziałek = 1,
Wtorek,
Środa,
Czwartek,
Piątek
}

// PRZYPADEK 3
wyliczenie Pora roku {
Wiosna = "WIOSNA",
Lato = "LATO",
jesień = "JESIEŃ",
Zima = "ZIMA"
}

Podczas transponowania stałych elementów wyliczeniowych do zwykłego kodu JavaScript wygenerowany kod używa ich wartości literałów. Może to być korzystne dla wydajności i ułatwić debugowanie.

Oto na przykład transpilowana wersja wyliczenia sezonowego:

rozm Pora roku;
(funkcjonować (Pora roku) {
Pora roku["Wiosna"] = "WIOSNA";
Pora roku["Lato"] = "LATO";
Pora roku["Jesień"] = "JESIEŃ";
Pora roku["Zima"] = "ZIMA";
})(Sezon || (Sezon = {}));

Obliczeni członkowie wyliczeniowi

Możesz użyć obliczonych elementów wyliczeniowych, aby przypisać wartości do elementów wyliczeniowych na podstawie wyrażeń lub innych obliczeń dynamicznych. Na przykład:

wyliczenie Rozmiar {
mały = 1,
Średni = obliczRozmiar(12),
Duży = obliczRozmiar(5)
}

funkcjonowaćobliczRozmiar(wartość: numer): numer{
powrót wartość * 5;
}

konsola.log (Rozmiar. Duży)

The Rozmiar enum ma trzech członków: Mały, Średni, I Duży. Jawnie przypisuje wartość 1 do elementu Small. The Średni I Duży członkowie używają funkcji obliczRozmiar aby obliczyć ich wartości w czasie wykonywania.

Podczas pracy z obliczonymi elementami członkowskimi wyliczenia należy pamiętać, że wartości nie są znane do czasu wykonania. Może to wprowadzić większą złożoność i potencjał błędy wykonawcze w porównaniu do członków enum ze stałymi wartościami.

Na przykład:

rozm Rozmiar;
(funkcjonować (Rozmiar) {
Rozmiar[Rozmiar["Mały"] = 1] = "Mały";
Rozmiar[Rozmiar["Średni"] = obliczRozmiar(12)] = "Średni";
Rozmiar[Rozmiar["Duży"] = obliczRozmiar(5)] = "Duży";
})(Rozmiar || (Rozmiar = {}));

konsola.dziennik(Rozmiar.Duży)

Powyższy blok kodu to transpilowana wersja pliku Rozmiar wyliczenie. Zwróć uwagę, że TypeScript nie uwzględnia w kodzie JavaScript wartości zwracanych z funkcji obliczania rozmiaru(). Zamiast tego zawiera oryginalne wywołanie funkcji, dzięki czemu JavaScript określa wartości w czasie wykonywania.

Dostęp do wartości wyliczeniowych

Możesz uzyskać dostęp do wartości członków enum za pomocą notacji kropkowej obiektu.

Na przykład:

wyliczenie Kierunek {
w górę = 0,
W dół = 1,
Lewy = 2,
Prawo = 3,
}

konsola.log (kierunek. Lewy) // 2

Odwrotne mapowanie wyliczeń liczbowych

Odwrotne mapowanie w numerycznych wyliczeniach odnosi się do możliwości pobrania odpowiedniej nazwy członka wyliczenia z jego wartości. Może to być szczególnie przydatne podczas pracy z wartościami liczbowymi, które mogą być potrzebne do zdekodowania.

Domyślnie wartości wyliczeniowe w TypeScript są odwzorowywane w przód, co oznacza, że ​​można uzyskać dostęp tylko do wartości powiązanej z nazwą. Można jednak ręcznie wykonać mapowanie odwrotne, aby pobrać element członkowski wyliczenia na podstawie jego wartości.

Na przykład:

wyliczenie Kierunek {
w górę = 1,
W dół,
Lewy,
Prawidłowy
}

funkcjonowaćpobierzNazwęKierunku(kierunekWartość: numer): strunowy{
// Odwrotne mapowanie
konst nazwakierunku = Kierunek[wartośćkierunku];
powrót nazwa kierunku;
}

konsola.log (getDirectionName(1)); // "W górę"
konsola.log (getDirectionName(3)); // "Lewy"

Ten pobierzNazwęKierunku Funkcja wykonuje mapowanie odwrotne, uzyskując dostęp do nazwy członka enum, używając jej wartości jako indeksu. Funkcja przyjmuje a kierunekWartość jako argument i pobiera odpowiednią nazwę członka enum za pomocą Kierunek[kierunekWartość].

Mapowanie odwrotne może być przydatne w scenariuszach, w których masz wartość liczbową i musisz określić odpowiednią nazwę elementu członkowskiego wyliczenia. Zapewnia wygodny sposób pracy z wyliczeniami zarówno w kierunku do przodu, jak i do tyłu.

Istnieje wiele zastosowań wyliczeń

Możesz używać wyliczeń w różnych scenariuszach, takich jak obsługa instrukcji switch, definiowanie parametrów funkcji, mapowanie danych i przedstawianie wyborów lub ustawień.

Niezależnie od tego, czy potrzebujesz reprezentować skończony zestaw opcji, czy zarządzać złożonymi przejściami między stanami, wyliczenia w TypeScript są cennym narzędziem zwiększającym przejrzystość i strukturę kodu.