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+
Na tym etapie naszej nauki prawdopodobnie już doskonale rozumiesz
wszystkie korzyści wynikające ze statycznego typowania być może też
w twojej głowie pojawiły się pytania dotyczące tego w jaki sposób typescript współpracuje
z istniejącymi już projektami czyli takimi które są napisane w czystym
javascripcie o tym wstępnie mówiłem już w kursie podstawowym czyli
generalnie nie ma z tym jakiegoś większego problemu aczkolwiek etap migracji
wymaga w niektórych miejscach od nas dodatkowej uwagi i teraz w sytuacji
gdy mamy do czynienia wyłącznie z naszym kodem no to w zasadzie nie ma tutaj żadnego
problemu ponieważ możemy go zmienić pytanie jednak co się dzieje w sytuacji
gdy chcemy skorzystać z zewnętrznych bibliotek które jek doskonale wiesz
często ułatwiają nam pracę i zdecydowanie nie chcemy z nich rezygnować jednocześnie większość
z nich nie jest napisana w typescripcie no i czy to oznacza że
nasza aplikacja będzie zbudowana z klocków które z jednej strony
będą mieć statyczne typowanie a z drugiej nie okazuje się
że jednak nie do końca istnieje sposób który umożliwia mam rozwiązanie
tego problemu przykładem zewnętrznej biblioteki z której
moglibyśmy skorzystać w naszym projekcie jest ramda jest to szczególnie przydatne
narzędzie w momencie gdy korzystamy z programowania funkcyjnego jej głównym
zadaniem jest udostępnienie mamy różnego rodzaju metod które pomagają nam
pisać kod zatem jeżeli teraz zainstalował bym ramdę w moim projekcie
będę mógł skorzystać z tych wszystkich metod importując
ramdę w następujący sposób i teraz problem polega na tym że jeżeli
chciałbym odwołać się do jakiejś z tych metod to jak widzisz visual studio code
nie posiada na ich temat żadnych informacji a mało tego nawet gdybym
skorzystał z metody którą już znam czyli na przykład metody add która pozwala
nam dodawać elementy do siebie to i tak okazuje się że nie mamy tutaj żadnej
informacji o typach które musimy przekazać do tej metody ani tym bardziej
tych które z niej otrzymujemy tak samo jeżeli zrobiłbym
w tej metodzie litrówkę dowiedziałbym się o tym fakcie dopiero na późniejszym
etapie na szczęście okazuje się że rozwiązanie tego problemu jest
stosunkowo proste wystarczy że zainstaluję tak zwane definicję typów
dla ramdy i to mogę zrobić po prostu wykorzystując yarn
zauważ że zainstalowałem tutaj paczkę poprzedzoną słowem types
i to właśnie sprawiło że nic już więcej nie muszę robić zwróć uwagę że już
w tym momencie typescript podkreśla mi tutaj błąd ze względu na to że
metoda adds nie istnieje w api ramdy jeżeli teraz wrócimy
do poprzedniego stanu wszystko jest w porządku i mało tego po najechaniu na
tą metodę mam tutaj wszystkie informacje na temat typów argumentów oraz zwracanej
wartości i gdyby tego było mało mamy też informacje o tym że
mamy tutaj również jedno przeciążenie funkcji aby zobaczyć jak ona
wygląda mogę przytrzymać klawisz command bądź też control na windowsie a
następnie kliknąć na tą metodę tutaj znajdują się obie definicje
typów tych funkcji tak że jak widzisz w bardzo prosty sposób dostaliśmy
tutaj możliwości które oferuje nam typescript pomimo tego że korzystamy
z biblioteki która nie wykorzystuje natywnie typescriptu i teraz
może nasunąć ci się pytanie skąd wiedziałem jaką bibliotekę należy tutaj zainstalować
okazuje się że w tym przypadku informacja ta pochodzi ze strony domowej
ramdy która dokładnie w tym miejscu daje
nam wskazówki dotyczące tego w jaki sposób zainstalować dodatkowe typy
natomiast ostatecznie jest jedno źródło które w zasadzie już teraz
powinieneś dodać do swoich narzędzi jest to strona definitely typed org
do której link powinien się teraz wyświetlić w każdym razie na
tej stronie znajdziesz definicję typów dla większości popularnych bibliotek tymczasem
być może w twojej głowie pojawiło się teraz kolejne pytanie dotyczące sytuacji
w której chcemy dopisać definicję typów dla naszych
projektów bez wątpienia na stronie definitely typed org nie
znajdziemy definicji typów do naszego prywatnego projektu a jednocześnie może
się okazać że coś takiego będzie nam potrzebne no i faktycznie jest
możliwość utworzenia własnych definicji typów dla zarówno naszych projektów
jak i zewnętrznych bibliotek i o tym powiem w kolejnej lekcji do
której gorąco cię zapraszam