Pracuję nad plikiem definicji dla Google Maps API dla TypeScript.
I muszę zdefiniować typ wyliczeniowy, np. google.maps.Animation
który zawiera dwie właściwości: BOUNCE
i DROP
.
Jak należy to zrobić w języku TypeScript?
enums
typescript
eNepper
źródło
źródło
Odpowiedzi:
TypeScript 0.9+ ma specyfikację wyliczeń:
Ostatni przecinek jest opcjonalny.
źródło
enum
konstrukcji na tym etapie, ponieważ zespół TypeScript jasno dał do zrozumienia, że to się zmieni - więc się zepsuje.Począwszy od TypeScript 0.9 (obecnie wersja alfa) możesz użyć definicji wyliczenia w następujący sposób:
Domyślnie tym wyliczeniom zostaną przypisane odpowiednio 0, 1 i 2. Jeśli chcesz jawnie ustawić te liczby, możesz to zrobić w ramach deklaracji wyliczenia.
Listing 6.2 Wyliczenia z jawnymi członkami
Oba te przykłady pochodzą bezpośrednio z TypeScript for JavaScript Programmers .
Zauważ, że różni się to od specyfikacji 0.8. Specyfikacja 0.8 wyglądała tak - ale została oznaczona jako eksperymentalna i prawdopodobnie ulegnie zmianie, więc będziesz musiał zaktualizować stary kod:
Zastrzeżenie - ten przykład 0.8 byłby uszkodzony w nowszych wersjach kompilatora TypeScript.
źródło
To jest teraz częścią języka. Zobacz TypeScriptLang.org> Basic Types> enum, aby uzyskać dokumentację na ten temat. Fragment dokumentacji na temat korzystania z tych wyliczeń:
Lub z ręcznymi numerami podkładowymi:
Możesz również wrócić do nazwy wyliczenia, używając na przykład
Color[2]
.Oto przykład tego, jak to wszystko idzie razem:
Spowoduje to zarejestrowanie:
Ponieważ w momencie pisania tego, Playground Typescript wygeneruje następujący kod:
źródło
Jeszcze jedna uwaga, że możesz wyliczyć identyfikator / ciąg za pomocą następującego:
źródło
str
iid
korzystając z tego?abstract class
bardziej odpowiednie, aby zapobiec tworzeniu wystąpień, ponieważ TypeScript nie ma pojęciastatic class
?Aktualizacja :
Jak zauważył @ iX3, Typescript 2.4 obsługuje ciągi wyliczeniowe.
Zobacz: Tworzenie wyliczenia z wartościami ciągów w skrypcie Typescript
Oryginalna odpowiedź:
W przypadku wartości składowych typu String język TypeScript dopuszcza tylko liczby jako wartości elementu członkowskiego wyliczenia. Ale jest kilka rozwiązań / hacków, które możesz wdrożyć;
Rozwiązanie 1:
skopiowane z: https://blog.rsuter.com/how-to-implement-an-enum-with-string-values-in-typescript/
Jest proste rozwiązanie: przed przypisaniem wystarczy rzutować literał ciągu na dowolny:
rozwiązanie 2:
skopiowane z: https://basarat.gitbooks.io/typescript/content/docs/types/literal-types.html
Możesz użyć literału ciągu jako typu. Na przykład:
Tutaj stworzyliśmy zmienną o nazwie foo, która pozwoli na przypisanie jej tylko wartości literalnej „Hello”. Przedstawiono to poniżej:
Same w sobie nie są zbyt przydatne, ale można je łączyć w unię typów, aby stworzyć potężną (i przydatną) abstrakcję, np .:
źródło
Wyliczenia w maszynie:
Wyliczenia są umieszczane w języku maszynopisu w celu zdefiniowania zestawu nazwanych stałych. Używanie wyliczeń może ułatwić nam życie. Powodem tego jest to, że te stałe są często łatwiejsze do odczytania niż wartość, którą reprezentuje wyliczenie.
Tworzenie wyliczenia:
Ten przykład z dokumentacji maszynopisu bardzo ładnie wyjaśnia, jak działają wyliczenia. Zwróć uwagę, że nasza pierwsza wartość wyliczenia (Up) jest inicjalizowana z wartością 1. Wszystkie kolejne elementy składowe wyliczenia liczby są następnie automatycznie zwiększane z tej wartości (tj. W dół = 2, w lewo = 3, w prawo = 4). Gdybyśmy nie zainicjowali pierwszej wartości wartością 1, wyliczenie zaczynałoby się od 0, a następnie automatycznie zwiększało (tj. W dół = 1, w lewo = 2, w prawo = 3).
Korzystanie z wyliczenia:
Możemy uzyskać dostęp do wartości wyliczenia w następujący sposób:
Zauważ, że w ten sposób jesteśmy o wiele bardziej opisowy w sposób piszemy nasz kod. Wyliczenia zasadniczo uniemożliwiają nam używanie liczb magicznych (liczb, które reprezentują jakąś jednostkę, ponieważ programista nadał im znaczenie w pewnym kontekście). Liczby magiczne są złe z następujących powodów:
źródło