Techniki Zaawansowane
2 godz. 35 min · Typescript · Full-stack i Programowanie
Adam GospodarczykZacznijmy od tego, że JavaScript jest dynamicznie typowany. Oznacza to, że typy zmiennych mogą się zmieniać w czasie wykonywania programu, a my nie mamy nad nimi kontroli. A po co nam ta kontrola? Między innymi po to, aby przypadkowo nie dodać typu number do string lub przekazać do funkcji nieprawidłowe danych. Ogromną zaletą jest to, że o tego typu błędach dowiadujemy się już na etapie pisania kodu a nie dopiero w trakcie jego wykonywania... na produkcji.
TypeScript umożliwia stosunkowo prostą migrację istniejących projektów JavaScript. W kursie na przykładzie zostały omówione trzy strategie, dzięki którym jesteśmy w stanie dodać statyczne typowanie do istniejącego kodu. W procesie migracji najważniejsze jest to, że przepisywanie kodu jesteśmy w stanie uzależnić również od poziomu naszej wiedzy na temat TypeScriptu i stopniowo dodawać kolejne elementy.
Na pierwszy rzut oka można uznać, że TypeScript tylko dodaje nam pracy, wymuszając dodatkową konfigurację oraz opisywanie typów. Mało tego zwiększa barierę wejścia w projekt dla mniej doświadczonych programistów. Trudno temu zaprzeczyć ALE - korzyści płynące ze statycznego typowania które wpływają na zmniejszenie liczby błędów oraz wykrywanie ich nawet na poziomie pisania kodu, oszczędzają czas który normalnie poświęcilibyśmy na późniejsze debugowanie aplikacji. Poza tym zwiększenie stabilności aplikacji daje szerokie korzyści biznesowe, które wielokrotnie wynagradzają nam czas wymagany na pisanie dodatkowej składni.
JavaScript jest językiem dynamicznie typowanym. W trakcie wykonywania programu, zmienne mogą zmieniać swój typ a my nie zawsze mamy nad tym świadomą kontrolę. Tylko ... po co nam ta kontrola? Główną zaletą statycznego typowania jest to aby uniknąć sytuacji w których przypadkowo przypisujemy tekst do zmiennej która powinna zawierać liczbę lub sytuacji w której przekazujemy do funkcji nieprawidłowe dane. Taki rodzaj pomyłek generuje błędy odniesienia (eng. ReferenceError), które zatrzymują działanie skryptu i są momentami bardzo uciążliwe do wykrycia. Dzięki statycznemu typowaniu, jesteśmy w stanie wykrywać je na etapie pisania kodu.
TypeScript na przestrzeni ostatnich lat zyskuje ogromną popularność w społeczności programistów JavaScript i coraz częściej jest nieodłącznym elementem ofert o pracę. W przypadku firm nastawionych na rozwój rozbudowanych aplikacji JavaScript już teraz jest w zasadzie standardem. Biorąc pod uwagę fakt, że najnowsze frameworki (np. Nest.js) wykorzystują TypeScript domyślnie, nauka tej technologii ma ogromny sens w kontekście rozwoju jako programista. I ostatnim argumentem za tym aby wziąć TypeScript na poważnie jest to, że stoi za nim firma Microsoft a on sam rozwijany jest już niemal 10 lat.
Ten kurs został stworzony z myślą o programistach, którzy podstawy TypeScriptu mają już za sobą i chcą poznać jego zaawansowane techniki. Aby w pełni wykorzystać wiedzę z tego kursu, niezbędna jest również zaawansowana znajomość JavaScriptu a w szczególności jego elementów prowadzonych w wersji ES6+. Zdecydowanie polecamy przerobienie kursu Podstawowego TypeScript, który znajdziesz na eduweb, przed korzystaniem z tego materiału.
3.9+
Kontynuując temat pliku konfiguracyjnego pozostały nam do omówienia
jeszcze source mapy na ten moment zakładam że o source mapach słyszałeś
a jeżeli nie to w skrócie są to po prostu zestawy danych na temat
naszego kodu które okazują się szczególnie przydatne w procesie debugowania
jeżeli ten temat interesuje cię bardziej polecam ci przeczytać
artykuł które w tej chwili powinien wyświetlić się na ekran tymczasem
jeszcze zanim przejdziemy do source map chciałbym pokazać ci jeszcze jedną opcję
pliku konfiguracyjnego a konkretnie będzie to noEmitOnError inaczej
mówiąc jak sama nazwa wskazuje w momencie gdy kompilator wykryje jakiś błąd
nie wygeneruje plików javascript aby ci to teraz udowodnić
przejdę teraz do pliku app.ts w którym zdefiniuję sobie funkcję której
argument nie będzie posiadał typu zatem mamy tutaj błąd typescriptu
natomiast sam kod javascript jest jak najbardziej poprawny teraz
gdy spróbuję skombinować sobie ten projekt kompilator poinformuję mnie o błędzie
i jednocześnie w moim katalogu nie pojawiły się żadne pliki javascript
w momencie gdyby ta opcja była wyłączona to
pomimo błędu kompilator wygenerował by pliki javascript no
i mamy tego dowód w tym miejscu zdecydowanie czasem
są sytuacje w których chcemy wyłączyć tą opcję oczywiście jednak
tego nie rekomenduje aby wygenerować source mapy do naszego
projektu ustawiamy opcję sourceMap na true więc nie
ma tutaj jakiegoś szczególnego zaskoczenia jeżeli teraz wygeneruję projekt
no to jak widzisz poza plikiem app.js został
wygenerowany również app.js.map zawiera on wspomniane
przeze mnie informacje które są wykorzystywane w procesie debugowania ale
oczywiście to nie jest tak że na etapie jednego ustawienia kończy się
temat source map mianowicie opcję generowania oddzielnego pliku
z source mapami możemy zastąpić opcją inlineSourceMap dzięki
temu w momencie generowania naszego projektu source mapy zostaną
dołączone bezpośrednio do pliku app.js no i dowód tego mamy
dokładnie w tym miejscu z drugiej strony może okazać się tak że
jednak będziemy chcieli generować zewnętrzne pliki source map ale
czasem mamy potrzebę dołączenia do nich kodu naszego projektu aby
to zrobić wystarczy że ustawimy opcję inlineSources na true no i efekt
będzie taki że po wygenerowaniu naszego projektu zostanie
wygenerowany dodatkowy plik z mapami natomiast jak widzisz tutaj kod
naszego projektu został do nich dołączony no i teraz
ostatnią opcją jeżeli chodzi o source mapy jest opcja mapRoot
bo znowu w niektórych sytuacjach może okazać się że nasze
source mapy trafiają do jednego katalogu a wygenerowane pliki naszego
projektu znajdują się w innym dlatego dzięki opcji mapRoot
jesteśmy w stanie wskazać miejsce w którym znajdą się nasze mapy czyli
jeżeli wygeneruję teraz ponownie projekt to w pliku app.js
w momencie gdy mamy tutaj dołączenia naszych source map mamy
również przekazaną tutaj informację o tym w którym miejscu te mapy się znajdują
naturalnie w tym momencie ten adres jest błędny ale mam
nadzieję że wiesz o co mi tutaj chodzi no i na ten moment kończymy tą
krótką lekcje a ja zapraszam cię do kolejnej