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+
Plik tsconfig.json jest bez wątpienia takim punktem centralnym każdego
projektu typescript wynika to z faktu że to wewnątrz niego wykorzystujemy
różnego rodzaju opcje które służą nam do tego abyśmy kontrolowali zarówno
działanie samego typescriptu jaki jego kompilatora tych opcji
jak pewnie sam się domyślasz jest dość sporo natomiast tobie wystarczy zrozumienie
tych najważniejszych a każdą kolejną będziesz odkrywał samodzielnie mi
zależy teraz na tym abyś zrozumiał jego role jego strukturę no i tak
jak wspomniałem najważniejsze opcje które będziesz wykorzystywał na codzień
tutaj jak widzisz mam już utworzony plik tsconfig który
znajduje się w głównym katalogu mojego projektu i właśnie sam fakt obecności tego
pliku sugeruje że znajdujemy się w głównym katalogu projektu teraz
wszystkie opcje które mamy do dyspozycji możemy wywołać wciskając kombinacje klawiszy
control i spacja zwróć uwagę że na głównym poziomie
mamy ich do dyspozycji dosłownie kilka wynika to z faktu że
najczęściej poruszamy się po właściwości compilerOptions to
wewnątrz niej pojawiają się prawdziwe możliwości tego konfiguratora w
kursie podstawowym przy okazji lekcji o pliku konfiguracyjnym omówiłem najważniejsze
opcje których potrzebujemy praktycznie za każdym razem w kolejnych
lekcjach przyjrzyjmy się nieco bardziej innym ustawieniom natomiast teraz chciałbym
zwrócić twoją uwagę na jeden mały fak mianowicie gdy nasz projekt
będzie się rozwijał a my będziemy coraz bardziej wymagający w stosunku do
typescriptu może się zdarzyć że będziemy potrzebowali kilku plików
konfiguracyjnych które możemy załączać do tego głównego pliku
konkretnie możemy to zrobić poprzez rozszerzenie czyli
jeżeli teraz utworze sobie tutaj nowy plik który również będzie
zawierał opcję kompilatora będę w stanie ten plik załączyć
do tego właśnie podając ścieżkę w tym miejscu i teraz
jak zauważyłeś zarówno w jednym jak i drugim pliku znajduje się właściwość
compilerOptions nic nie stoi na przeszkodzie abyśmy wewnątrz niej zdefiniowali
dodatkowe opcje które będą połączone z opcjami które zdefiniowaliśmy
tutaj w momencie gdyby te właściwości się powtórzyły zarówno w jednym
jak i drugim pliku to musisz pamiętać że w pierwszej kolejności wczytywane
są opcje z głównego pliku natomiast dopiero później wczytujemy kolejne
pliki oznacza to że pliki które zdefiniujemy tutaj będą
miały pierwszeństwo nad plikiem głównym inaczej mówiąc jeżeli tutaj
mamy opcje target ustawioną na es5 a w naszym dołączanym
pliku ustawimy tą opcję na es6 no to finalnie nasz
kot skompiluje się do wersji es6 kolejnym godnym
wspomnienia jest fakt że możemy tutaj wskazać poszczególne pliki które
mają być wzięte pod uwagę w procesie kompilacji bądź też wskazać katalogi
które mają zostać uwzględnione bądź też wykluczone proponuję
abyśmy dodali teraz nasz plik app.ts do plików które mają zostać
uwzględnione w procesie kompilacji oraz ustawię target na ESNext
i teraz ważne jest to że w momencie gdybyś uruchomił teraz polecenie
tsc app.ts kod typescript który
znajduje się w tym pliku zostanie przekompilowany do javascriptu ale
z pominięciem ustawień które mamy w pliku tsconfig.json mało
tego jak widzisz pojawiły nam się tutaj błędy wynikające z faktu wynikające
z faktu że wykorzystałem tutaj składnię async await a domyślnie kompilator
próbował przetłumaczyć ten kod do wersji es3 i finalnie zaowocowało
to kilkoma błędami tak czyli inaczej plik app.js został tutaj wygenerowany
natomiast gdybyśmy chcieli skorzystać z ustawień które zdefiniowaliśmy
w pliku tsconfig moglibyśmy przekazać do kompilatora flagę
project dzięki temu nasz projekt zostanie skompilowany i przeniesiony
do katalogu dist a wewnątrz niego ze względu na to że ustawiłem
w pliku konfiguracyjnym opcję ESNext otrzymałem dokładnie
taki sam kod nie został on w tej chwili w żaden sposób zmodyfikowany
ze względu na to że w ESNext składnia async await jest
jak najbardziej dostępna mam nadzieję że to wszystko jest dla ciebie jasne
i na ten moment to wszystko kolejnym opcjom będziemy przyglądać się
odpowiednio w kolejnych lekcjach mam nadzieję do usłyszenia za chwilę
Compiler Options · 1 min
{
"compilerOptions": {
"target": "ESNext",
"module": "commonjs",
"lib": ["dom", "es6"],
"outDir": "dist",
}
}