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+
Konfiguracja samego TypeScriptu to jedno, a konfiguracja naszego IDE to drugie.
Teoretycznie mógłbyś wykorzystywać TypeScript już teraz.
Natomiast ja chciałbym pokazać Ci jak
skonfigurować narzędzia po to, aby pisanie kodu było dla Ciebie prostsze.
W tym celu wykorzystamy kilka narzędzi.
Istnieje szansa, że już o nich słyszałeś.
Mianowicie będzie to Prettier, ESLint oraz wbudowany Debugger.
Przede wszystkim upewnij się, że masz zainstalowane te rozszerzenia.
Będzie to Prettier i jego ikonka wygląda w ten sposób.
Następnie ESLint.
Oraz Debugger for Chrome.
Po ich instalacji możemy przejść do konfiguracji i w pierwszej kolejności
przejdź do pliku settings.json, w którym powinieneś ustawić takie opcje jak tutaj.
Oczywiście nie musisz tego przepisywać, tylko zajrzyj do źródeł tego kursu.
Mam nadzieję, że nie będziesz miał nic
przeciwko, jeżeli pominę opis tych funkcji.
W tej chwili nie jest to do końca istotne
poza tym, że aktywujemy tutaj Prettier'a oraz ESLint.
Jedyną opcją, która może Cię faktycznie
zainteresować jest uruchamianie automatycznego formatowania po zapisaniu pliku.
Z jakiegoś powodu możesz chcieć wyłączyć tę opcję.
Tymczasem przechodzimy do dalszej
konfiguracji: mianowicie zajmiemy się teraz instalacją niezbędnych paczek.
Będzie to obszerna lista, która nie wymaga
omówienia, dlatego pozwolę sobie ją wkleić.
Zanim jednak to wszystko zainstalujemy, dodamy również dwa nowe skrypty.
Są to jak widzisz skrypty uruchamiające polecenie ESLint.
I teraz jeżeli chodzi o ESLint musisz wiedzieć tylko tyle, że jego rolą będzie
czuwanie nad tym, żeby nasza składnia była zgodna z dobrymi praktykami.
Oczywiście te wszystkie dobre praktyki możemy sobie skonfigurować.
W każdym razie teraz możemy po prostu uruchomić polecenie 'yarn install'.
Kolejnym krokiem będzie utworzenie pliku
konfiguracyjnego ESLint, w którym znajdzie się cała konfiguracja ESLint.
Tutaj tego wszystkiego jest naprawdę dużo i tak naprawdę większości tych plugginów nie
musisz znać, tylko po prostu wiedz, że wykorzystujemy tutaj dobre praktyki
ze style guide'a AirBnB
oraz wyłączamy kilka niepotrzebnych opcji.
W praktyce dostosowanie tego pliku zależy w dużym stopniu od projektu.
Ta konfiguracja, którą widzisz, powinna wystarczyć nam na potrzeby tego kursu.
Bo np. jeżeli miałbyś projekt, wykorzystujący ReactJS
z pewnością chciałbyś zadbać o to, aby ESLint się o tym dowiedział.
Całkiem istotny jest jeszcze tutaj fakt, że jak widzisz tutaj wykorzystujemy również
konfigurację naszego TypeScriptu. Dzięki temu ESLint wie co się dzieje po stronie TypeScriptu.
Tymczasem kolejny plik konfiguracyjny, który jest nam potrzebny
dotyczy samego Prettier'a.
W przeciwieństwie do ESLint
tutaj będzie zdecydowanie prościej.
Po prostu mamy tutaj dwie, małe opcje, które dbają o średniki i przecinki.
Teraz zarówno ESLint, jak i Prettier są
gotowe i możemy przejść do opisania naszego kodu.
Konkretnie stworzymy sobie tutaj klasę i
od razu mamy jakąś informację. Mianowicie ESLint ostrzega nas, że zdefiniowaliśmy klasę, ale
jej nie wykorzystaliśmy i to akurat na ten moment jest ok,
ale oczywiście musimy się tym zająć,
więc definiujemy constructor. I od razu mamy tutaj błąd.
Ponownie ESLint informuje nas o tym, że zdefiniowaliśmy bezużyteczny constructor.
I faktycznie w tej chwili on dokładnie taki jest.
Dlatego zadbamy, aby miał jakieś zajęcie i dzięki niemu tworzymy właściwość name.
Następnie mamy klasykę gatunku, czyli
metodę sayHello, która ponownie jest podkreślona jako błąd.
I tutaj akurat ESLint przypomina nam o tym,
że musimy określić typ wartości zwracanej przez tę funkcję.
Na ten temat akurat będziemy rozmawiać jeszcze w kolejnych lekcjach,
ale tymczasem dodam tutaj rozwiązanie.
Teraz jesteśmy gotowi do tego, aby zadbać o to upomnienie i wykorzystać tę klasę.
No i faktycznie upomnienie stąd zniknęło, ale pojawiło się tutaj. Ponownie mamy
informację o tym, że utworzyliśmy zmienną, która nie została nigdzie wykorzystana.
Musisz przyznać, że tego typu upomnienia mogą być całkiem przydatne w kontekście
jakości naszego kodu i tak naprawdę na tym właśnie polega główne zadanie ESLint.
No to proponuję, abyśmy jednak wykorzystali tą zmienną. Musisz przyznać, że takie
przypominanie jest całkiem przydatne, ale teraz pokażę Ci coś jeszcze,
czyli rolę jaką pełni Prettier.
Załóżmy, że sformatujemy to sobie nieco inaczej.
Jak widzisz tak napisany kod nie jest już
tak samo czytelny jak ten przed chwilą, ale wystarczy, że zapiszę teraz tę zmianę,
no i Prettier zadbał o to, żeby wszystko wróciło do normy.
Tym sposobem osiągnęliśmy cel tego filmu.
Ale mam dla Ciebie coś jeszcze.
Zazwyczaj w sytuacji, gdy chcemy podejrzeć
wartość jakiejś zmiennej, wykorzystujemy po prostu console.log.
Jest to jak najbardziej OK.
No ale żeby zobaczyć wartość tej zmiennej muszę teraz przejść do przeglądarki,
wykonać odpowiednią akcję i dopiero wtedy mogę zobaczyć jej wartość.
Drugim sposobem jest wykorzystanie debuggera
wbudowanego w przeglądarkę Chrome i oczywiście jest to bardzo dobra opcja,
przy czym mamy jeszcze lepszą. Mianowicie
tą opcją jest wykorzystanie debuggera bezpośrednio w Visual Studio Code.
W tym celu wciskam kombinację klawiszy Command+Shift+IDE do tego, aby uruchomić
debugger. Na początek ponownie musimy utworzyć nowy plik konfiguracyjny
i w tym przypadku interesuje nas Chrome. Ze względu na to, że do budowania naszej
aplikacji wykorzystujemy ParcelJS w jego dokumentacji możemy znaleźć
konfigurację tego debuggera. Po prostu ją teraz skopiuję,
ale i tak będziemy musieli ją w pewnym stopniu dostosować.
Konkretnie nie wiem z jakiego powodu ta konfiguracja nie pomija plików zawartych w
katalogu node_modules. Debuggowanie tych plików w większości przypadków raczej nas nie
interesuje, więc ta opcja jest jak najbardziej pożądana.
No ale teraz niestety, żeby to wszystko działało, musimy zrobić coś jeszcze i
ponownie czeka nas stworzenie pliku konfiguracyjnego,
tym razem babel'a.
Tutaj musimy uruchomić dwa plugginy, które zadbają o to, aby debugger funkcjonował poprawnie
w związku z tym, że wykorzystujemy TypeScript.
Zwróć uwagę jak Prettier dba o to, abym pisał poprawny kod.
W każdym razie na tym etapie powinniśmy być gotowi do tego, aby uruchomić naszą
aplikację. I tutaj usunę tylko ten console.log i uruchomię samą aplikację.
Aplikacja działa, ale nas interesuje sam debugger.
Aby go teraz wykorzystać musimy zaznaczyć tzw.
break pointy.
Jeżeli korzystałeś z debuggera wbudowanego w Chrome, z pewnością ta czynność nie jest Ci obca.
Teraz, w momencie gdy uruchomię ten debugger,
wykonywanie aplikacji zostało zatrzymane a ja mogę podejrzeć wartości zmiennych. W ten
oto sposób uzyskaliśmy narzędzia, które sprzyjają odpowiedniemu developmentowi.
Oczywiście sam etap konfiguracji jest uciążliwy i czasem na etapie developmentu
może pojawić się jakaś sytuacja, która będzie wymagała zmiany tej konfiguracji.
Natomiast nie ma wątpliwości co do tego, że tak zainwestowany czas po prostu się
zwraca. I tym pozytywnym akcentem kończymy tę lekcję i słyszymy się za chwilę.