od Podstaw
1 godz. 54 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.
Prawdopodobnie znasz mechanizm intellisense, czyli inteligentnego podpowiadania kodu przez edytor. Pisząc kod w TypeScript, tworzysz definicje typów dotyczących Twojej aplikacji. W ten sposób dostęp do definicji klas i właściwości obiektów masz właściwie na wyciągnięcie myszki. Wystarczy "hover" na funkcji aby uzyskać szczegółowe informacje, które pomogą Ci w pisaniu kodu. Oprócz tego otrzymasz również automatyczne podpowiedzi w trakcie dostępu do właściwości i metod. Nic tylko pisać kod!
Nie musisz przepisywać całego projektu. TypeScript stanowi nadzbiór JavaScriptu. Zatem cały Twój projekt jest z nim w 100% kompatybilny, a Ty możesz stopniowo dodawać definicje typów. Nawet nie będziesz wiedział kiedy typy pojawią się w całej Twojej aplikacji. To daje Ci również możliwość uczenia się TypeScriptu w trakcie jego wdrażania. W tym kursie opanujesz podstawy a później... sam zobaczysz!
Ten kurs został stworzony z myślą o programistach, którzy podstawy JavaScriptu mają już za sobą i chcą poznać zalety statycznego typowania oferowanego przez TypeScript. Na początku Kursu zaczynamy również od krótkiej powtórki najważniejszych elementów samego JS.
3.8+
Na tym etapie możemy już zadbać, aby nasze pliki były uruchamiane w przeglądarce.
Oczywiście same przeglądarki nie potrafią rozumieć kodu napisanego w TypeScripcie,
dlatego musimy go wcześniej przetłumaczyć do czystego JavaScript'u.
I w tym celu będziemy wykorzystywać narzędzia jakim jest TypeScript compiler.
Przejdźmy już zatem do naszego pliku, który za chwilę przetłumaczymy. Na ten moment
wystarczy, że zapiszemy w nim jakiś prosty console.log.
Teraz z pomocą TypeScript compilera, czyli polecenia tsc.
No i w katalogu głównym pojawił się plik app.js, który zawiera dokładnie ten sam kod i w
tym akurat nie ma nic dziwnego, ponieważ consol.log jest poprawnym kodem
JavaScript, więc sam compiler nie miał tutaj nic do roboty.
Ale co się stanie w sytuacji, gdy dodamy
tutaj funkcję foo, która będzie wykorzystywać składnię async/await.
I poza tym, jak widzisz, ma dodatkowe oznaczenie pochodzące z TypeScriptu.
W tej sytuacji wykonanie polecenia tsc zakończy się wygenerowaniem pliku,
który będzie posiadał nieco inną zawartość.
Zobacz, że mamy tutaj mnóstwo kodu, którego wcale nie pisaliśmy.
Mało tego: jest to jakiś stary kod, wykorzystujący słowa kluczowe var.
Ostatecznie jednak tutaj na dole pliku znajduje się nasz console.log, który napisaliśmy
oraz funkcja foo, co prawda ze zmienioną składnią,
natomiast nadal jest to funkcja, którą napisaliśmy.
To wszystko wynika z faktu, że domyślnie compiler kompiluje pliki do wersji
zgodnej z ECMAScript 3, czyli dość starej wersji JavaScript.
No ale w tej chwili mamy pewność, że ten
kod zadziała nawet na starszych przeglądarkach.
Jeżeli jednak chcielibyśmy zmienić to
zachowanie moglibyśmy przekazać dodatkową opcję, mówiącą o tym, do której wersji języka
chcemy kompilować nasz kod i to akurat możemy zrobić, wykorzystując flagę target.
Zawartość naszego pliku uległa co prawda
zmianie, natomiast zwróć uwagę, że nadal mamy tutaj dużo dodatkowego kodu.
To jest oczywiście ok i z tym akurat nie
musimy już nic więcej robić, ale może z jakiegoś powodu chciałbyś skompliować
tę wersję do najnowszego JavaScript'u. Wtedy tutaj podajemy wersję ESNext.
I w tej sytuacji ze względu na to, że składnia async/await jest już dostępna w
nowym JavaScripcie, jedyne co zostało zrobione podczas tłumaczenia to została usunięta
dodatkowa składnia, dotycząca typów tej funkcji.
Na tym etapie mogą zainteresować Cię
dodatkowe opcje compilera, takie jak chociażby outDir.
Dzięki niej jesteśmy w stanie wskazać
folder, do którego trafią przetłumaczone pliki.
Zazwyczaj jest to katalog dist.
Jak widzisz po kompilacji faktycznie ten
katalog został utworzony. Wewnątrz niego znajduje się nasz kod.
No i musimy tylko zadbać o to, aby w pliku
indeks HTML odpowiednio zaktualizować ścieżkę do tego pliku.
W każdym razie jesteśmy teraz gotowi do tego, aby uruchomić ten plik w przeglądarce.
Nasza strona to obecnie pusty plik, ale w
konsoli pojawił się komunikat, o który nam chodziło.
Oczywiście to nie jest teraz tak, że za każdym razem, gdy będziemy chcieli
tłumaczyć plik TypeScript, będziemy musieli uruchamiać to polecenie,
ponieważ w pierwszej kolejności możemy wykorzystać flagę watch do tego, aby
obserwować plik TypeScript i wtedy, w momencie gdy będziemy wprowadzać w nim jakieś
zmiany, zostaną one automatycznie zastosowane w pliku app.js.
W praktyce jednak, pomimo tego, że flaga watch jest dość wygodna i tak będziemy
korzystać z narzędzi takich jak chociażby WebPack czy np.
Parcel do tego, aby budować naszą aplikację.
Jednak problem, który nadal nie pozostaje
rozwiązany to kwestia opcji, którą przekazujemy do compilera.
Na ten moment przekazywaliśmy ich dosłownie kilka, ale w momencie gdy uruchomisz
polecenie tsc zobaczysz, że opcji, które oferuje compiler, jest zdecydowanie więcej.
Zapisywanie ich wszystkich bezpośrednio
przy uruchamianiu komendy tsc byłoby bardzo uciążliwe. Dlatego TypeScript
oferuje nam plik konfiguracyjny, którym zajmiemy się już w kolejnej lekcji.
No to do usłyszenia za chwilę.