TypeScript 2.3 – Generatory
W TypeScript 2.3, który pojawi się w maju. Jedną z nowych możliwości, dostępnych w języku, będzie możliwość korzystania z generatorów.
TypeScript goni z zmianami w pojawiającymi się JavaScript. Jak TypeScript goni za zmianami to ja też muszę.
Generator to funkcja, która potrafi zwracać wiele wartości. Potrafi uwaga, uwaga generować je, na przykład na podstawie poprzednich wartości.
Klasycznie jak funkcja coś zwraca to funkcja razem z zwróconą wartością kończy swój żywot. W przypadku generatorów one giną, gdy:
- Wykonywanie kodu dojdzie do klamry zamykającą funkcję
- Generator wyrzuci wyjątek
- Generator zostanie przerwany
Kod:
Dodałem wszędzie gdzie się da adnotacje o typach.
W powyższym przykładzie utworzyłem, nie kończący się generator, poprzez wykorzystanie nie kończącej się pętli while(true) {...}
.
Trzeba zaważyć, że przy tworzeniu funkcji-generatora, słowo kluczowe function
zakończone jest gwiazdką *
. To informacja dla kompilatora, że funkcja jest generatorem.
Funkcje generatory (w TypeScript) zwracają typ generyczny IterableIterator<TType>
(gdzie w naszym przypadku TType
to number
). Jest to obiekt z 3 funkcjami.
next()
otrzymujemy kolejną wartość z generatorareturn(value)
funkcja zakończa działanie generatora i zwraca podaną wartość.throw(exception)
funkcja wyrzuca wyjątek w generatorze.
Funkcja next()
nie zwraca nam 'czystej’ wartości. Jest ona opakowana w IteratorResult<TType>
. Jest to struktura o dwóch polach:
value
– wartość typuTType
done
– wartość prawda/fałsz określająca czy generator umiał wygenerować kolejną wartość.
Chcę się pobawić z TypeScript 2.3 (przed premierą)
Visual Studio Code, obok wersji stabilnej, ma także wersję niestabilną o nazwie Insiders. Insiders edition przychodzi razem z wsparciem dla aktualnej wersji developerskiej TypeScripta.