TypeScriptowe typowanie jest bezsprzeczną pomocą podczas pisania bezpiecznego i czytelnego kodu. W przypadku operowania na danych które pochodzą z zewnętrznych źródeł mamy możliwość użycia generatorów, które utworzą dla nas modele danych oraz serwisy potrzebne do współpracy z nimi. Wymogiem jest posiadanie dokumentacji dokładnie opisującej każdy kontrakt.

Użycie generatorów daje nam jeszcze jedną przewagę (przy założeniu, że dokumentacja ma odzwierciedlenie w rzeczywistym działaniu API) – pozwala na automatyczne uruchomienie generatora i utworzenia Pull Requesta za każdym razem, gdy zaistniała jakaś zmiana w dokumentacji.

Poniżej przedstawię dwie biblioteki, jedną opartą o standard OpenAPI, pozwalającą wygenerować potrzebne do współpracy z API interfejsy oraz serwisy. Druga natomiast zapewni nam utworzenie Typów na podstawie GraphQL Schema.

@openapitools/openapi-generator-cli

Przykładowe wywołanie:

npx openapi-generator-cli generate \
  -i PATH_TO_YAML_OR_JSON_INPUT_FILE \
  -g typescript-angular \
  -o PATH_TO_OUTUP_DICTIONARY \

  --additional-properties=ngVersion=X.X.X,supportsES6=true,withInterfaces=true

Ta biblioteka generuje wszystko, co jest nam potrzebne do komunikacji z API – interfejsy oraz moduł zawierający serwisy z metodami wykorzystującymi pod spodem Angularowy HttpClient, zwracającymi Observable w konkretnym typie. Dodatkowo radzi sobie z dokumentacją rozbitą na wiele plików YAML, a także typami rekurencyjnymi.

@graphql-codegen/cli

npx graphql-codegen init

Wywołując powyższą komendę zostaniemy przeprowadzeni przez konfigurator. Biblioteka pozwoli nam wygenerować Typy na podstawie GraphQL Schema. Dostępnych jest również sporo pluginów pozwalających rozszerzyć funkcjonalność narzędzia. W celu zapoznania się z pełną dokumentacją odwiedź stronę projektu na GitHub.