Poradnik, jak z tym pracować

TypeScript, będący rozszerzeniem JavaScript, wprowadza statyczne typowanie, znacząco podnosząc poziom bezpieczeństwa tworzonego kodu. Dzięki temu, wiele potencjalnych błędów jest wykrywanych już na etapie kompilacji, a nie dopiero w trakcie działania programu. Istotnym elementem tego języka są wyliczenia, czyli tzw. enumy. Stanowią one kluczową konstrukcję, która wpływa na przejrzystość i niezawodność kodu.

W dalszej części artykułu szczegółowo omówimy, czym są wyliczenia, jak je tworzyć i wykorzystywać, oraz jakie korzyści płyną z ich stosowania. Przedstawimy również aspekty, które należy wziąć pod uwagę podczas pracy z nimi.

Czym jest wyliczenie?

Wyliczenie, czyli enum, to typ danych, który definiuje zestaw nazwanych wartości. Każda z tych wartości, zwana również elementem lub członkiem, reprezentuje unikalny stan lub opcję. Wyliczenia, choć szczególnie kojarzone z TypeScriptem, są koncepcją znaną i używaną w wielu językach programowania. Ich głównym celem jest zwiększenie bezpieczeństwa typów w kodzie TypeScript. W dalszej części artykułu będziemy stosować termin „członek” na określenie poszczególnych wartości w wyliczeniu.

Warto przeczytać również: Najlepsze biblioteki i środowiska uruchomieniowe TypeScript dla programistów.

Dlaczego warto korzystać z wyliczeń?

Wyliczenia pozwalają jasno określić zbiór dozwolonych wartości, które może przyjmować zmienna lub argument funkcji. Dzięki temu programiści unikają sytuacji, w której do zmiennej lub argumentu przekazywane są nieoczekiwane wartości. Taka kontrola znacząco minimalizuje ryzyko wystąpienia błędów i prowadzi do tworzenia bardziej stabilnego i bezpiecznego kodu.

Wymagania wstępne do pracy z wyliczeniami

Ten poradnik skupia się na praktycznym zastosowaniu wyliczeń w TypeScript. Aby w pełni skorzystać z przedstawionych przykładów, niezbędne jest środowisko umożliwiające uruchamianie kodu TypeScript.

Wymagana jest instalacja Node.js, pozwalająca na wykonywanie kodu JavaScript, na który jest kompilowany TypeScript. Jeśli TypeScript nie jest jeszcze zainstalowany, pomocna może być instrukcja przedstawiona w poniższym filmie.

Alternatywnie, można wykorzystać narzędzie ts-node, które umożliwia natychmiastową kompilację i uruchomienie skryptów TypeScript. Mimo, że w tym artykule użyjemy właśnie ts-node, w przypadku większych projektów zaleca się tradycyjną instalację TypeScript. Skrypt uruchamiamy za pomocą poniższej komendy:

npx ts-node <nazwa_skryptu>

Dodatkowym założeniem jest podstawowa znajomość języków JavaScript i TypeScript.

Praca z prostym wyliczeniem

Jak utworzyć proste wyliczenie

Wyliczenia w TypeScript definiuje się przy użyciu słowa kluczowego enum, po którym następuje nazwa wyliczenia oraz lista jego członków. Poniższy przykład demonstruje stworzenie wyliczenia dla czterech podstawowych kierunków świata:

enum Direction {
    North,
    East,
    South,
    West
}

Ważne jest, aby pamiętać, że elementy wyliczenia nie są otoczone cudzysłowami, ponieważ nie są ciągami znaków.

Jak korzystać z prostego wyliczenia

Wyliczoną wartość można przypisać do zmiennej w następujący sposób:

const heading: Direction = Direction.North;

Dzięki inferencji typów, TypeScript potrafi automatycznie rozpoznać typ danych przypisanej wartości. W rezultacie, możemy zapisać to krócej:

const heading = Direction.North;

Aby sprawdzić wartość zmiennej heading, można ją wypisać za pomocą console.log:

console.log(heading);

W wyniku otrzymamy:

0

Mimo przypisania Direction.North, zmienna heading przechowuje wartość zero. Wynika to z faktu, że podczas tworzenia wyliczenia, każdemu członkowi przypisywana jest domyślnie wartość liczbowa, zaczynając od zera. Pierwszemu członkowi przypada 0, drugiemu 1 i tak dalej. Poniżej prezentujemy przykład:

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

W związku z tym, możemy sprawdzać, czy zmienna heading wskazuje na kierunek północ, porównując ją z wartością 0. Przykład:

let isNorth = heading == 0;
console.log(isNorth);

Jak pokazano, Direction.North odpowiada wartości 0. Zamiast porównywać kurs z wartością liczbową, możemy bezpośrednio porównać go z Direction.North:

isNorth = heading == Direction.North;
console.log(isNorth);

Powyższe przykłady ilustrują podstawowe zastosowanie wyliczeń. W kolejnych sekcjach przedstawimy, jak korzystać z niestandardowych wartości.

Praca z wartościami niestandardowymi

TypeScript, domyślnie, przypisuje członkom wyliczenia wartości liczbowe, rozpoczynając od zera. Istnieje jednak możliwość zdefiniowania własnych wartości. Oto przykład:

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

Możemy również postąpić następująco:

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

W takim przypadku, pierwszy członek przyjmie wartość 1, a kolejne będą automatycznie zwiększane o 1. Poor będzie miał wartość 2, Average wartość 3 i tak dalej.

Wartości członków wyliczenia nie muszą być zawsze liczbowe. Mogą to być również ciągi znaków. Wyliczenia z wartościami liczbowymi zachowują się jak zwykłe liczby.

console.log(typeof StarRating.Average);

Spowoduje to wypisanie „number”. Możemy wykonywać na nich operacje matematyczne, takie jak porównywanie:

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

Wynikiem będzie „true”.

Używanie ciągów znaków jako wartości niestandardowych

Jak wspomniano wcześniej, członkowie wyliczenia mogą przyjmować wartości tekstowe. Oto przykład:

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

W tym przypadku, członkowie wyliczenia działają analogicznie do poprzednich. Z tą różnicą, że ich wartości są ciągami znaków i możemy wykonywać na nich operacje specyficzne dla stringów, a nie liczb.

Wyliczenia heterogeniczne

Możliwe jest również łączenie wartości tekstowych i numerycznych w jednym wyliczeniu. Nie jest to jednak zalecane i rzadko przydatne:

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

Podsumowanie

W artykule omówiliśmy istotę wyliczeń w TypeScript, ich zastosowanie oraz korzyści wynikające z ich stosowania. Przedstawiliśmy różne rodzaje wartości, jakie mogą przyjmować elementy wyliczeniowe.

Zapraszamy do zapoznania się z naszym kolejnym artykułem, który porusza temat różnic między typem a interfejsem w TypeScript.


newsblog.pl