Podstawy
1 godz. 31 min · Typescript · Full-stack i Programowanie
Adam GospodarczykTypeScript umożliwia opisanie naszego kodu typami oraz wychwytywanie dotyczących ich błędów na wczesnym etapie developmentu. W efekcie wykorzystanie TypeScript'u w projekcie podnosi jego jakość i zmniejsza ryzyko pomyłek, które mogą być nie wychwycone na etapie testowania lub mogą pojawić się dopiero w środowisku produkcyjnym.
Z pomocą Reacta tworzymy coraz bardziej złożone aplikacje w których ryzyko popełnienia błędów jest wysokie. TypeScript nie tylko je zmniejsza ale również wpływa pozytywnie na tzw. developer experience (doświadczenia programisty) poprzez to, że nasze IDE "wie więcej" na temat kodu który piszemy. A to z kolei przekłada się na lepszą wydajność i komfort pracy.
Przy założeniu że znamy już samego Reacta oraz TypeScript, połączenie tych dwóch umiejętności jest stosunkowo proste. Wystarczy poznać ogólne zasady typowania propsów, komponentów oraz hooków aby z powodzeniem móc wykorzystywać zalety płynące z posiadania typów w naszym kodzie. W tym kursie dowiesz się jak to zrobić, w najszybszy możliwy sposób.
Kurs został przygotowany tak aby na prostych przykładach pokazać Ci w jaki sposób wykorzystywać TypeScript w projektach React.js. Jeżeli szukasz źródła które pozwoli Ci szybko zacząć - jesteś w dobrym miejscu.
Materiał zawiera dobre praktyki i sugestie dotyczące wykorzystania TypeScript'u oraz konfiguracji środowiska pracy (np. IDE) oraz ustawień samego projektu. Jest to wiedza którą możesz wykorzystać również w przypadku pracy z innymi technologiami.
Kurs został przygotowany z myślą o osobach, które znają już React oraz TypeScript i chcą dowiedzieć się w jaki sposób połączyć te umiejętności. Materiał niemal całkowicie pomija informacje na temat mechanizmów Reacta oraz TypeScript'u. Jeżeli potrzebujesz poszerzyć swoją wiedzę na ich temat, zapraszamy Cię do naszych pozostałych kursów.
W tej lekcji przechodzimy już do typowania komponentów i tak naprawdę z komponentów
funkcyjnych już zdarzyło nam się korzystać.
Natomiast teraz przejdziemy sobie krok po
kroku przez wszystkie elementy, o których musisz wiedzieć.
Zatem znowu zaczynamy tutaj od zera i
utworzymy sobie tutaj nowy komponent funkcyjny.
Tak naprawdę w tym momencie możemy już go
wykorzystać, ponieważ mamy tutaj zwykłą funkcję i gdy wykorzystując impedancję
typów domyślił się, że mamy tutaj do czynienia z komponentem funkcyjnym.
Mało tego, od razu zabezpiecza nas na wypadek, gdyby np.
ta funkcja zwróciła undefined bądź nie zwróciła żadnej wartości.
No to wtedy będziemy mieć błąd informujący
nas o tym, że nie mamy tutaj do czynienia z komponentem.
Ponieważ tak jak już powiedziałem,
komponent musi zwracać albo poprawne elementy g sex lub ewentualnie null.
Natomiast idąc dalej możemy tutaj
przekazać również propsy i tak długo, dopóki nie określimy, że spodziewamy się
takich procesów w naszym komponencie, będziemy otrzymywać tutaj błąd.
Zatem jeżeli tutaj jak myślę, że spodziewam się tutaj
tekst, a następnie określa jego typ, no to wszystko wraca do normy.
I swoją drogą zwróćcie uwagę co tutaj zrobiłem.
Chciałem zwrócić tutaj bezpośrednio tekst,
a jeżeli po prostu zostawię to w ten sposób, to otrzymamy tutaj błąd, ponieważ
tekst nie jest poprawnym elementem, że jest tekst.
Z tego powodu najprostszym możliwym
rozwiązaniem jest właśnie opakowanie tego, co zwracamy z naszego komponentu.
Fragment, a właściwie zapis skrótowy.
W ten sposób nie otrzymujemy tutaj błędu,
a efekt końcowy jest dokładnie taki, jakbyśmy się tego spodziewali.
Następnie wspominając już o tym, że w
przypadku komponentów funkcyjnych możemy określić ich typ za pomocą Function
komponent I jest to specjalny typ, który importujemy bezpośrednio z ACTA.
W tym momencie okazuje się, że mamy tutaj błąd, ponieważ w tej sytuacji typy props
przekazujemy wykorzystując zapis generyczny.
No i teraz ponownie wszystko wróciło do normy.
Tutaj raz jeszcze tylko podkreślam, że w
takiej sytuacji, w momencie gdy wykorzystujemy function component
niejawnie otrzymujemy bonus w postaci typowania.
Czyli jeżeli teraz wykorzystali byśmy,
no to nie otrzymujemy tutaj żadnego błędu, a nie zawsze jest to oczekiwane.
Z tego powodu w momencie, gdy wykorzystuję
komponenty funkcyjne, raczej korzystam z tego poprzedniego zapisu, czyli po prostu
określenia typu parametrów tej funkcji dosłownie w taki sposób.
Dzięki temu, jak widzisz jasno mamy tutaj błąd informujący nas o tym, że właściwość
hidden nie znajduje się w naszym typie i tak długo, dopóki nie określimy jej typu,
nie będziemy mogli z niej skorzystać, co oczywiście może uchronić nas przed
jakimiś dodatkowymi błędami w tej sytuacji.
Ostatnim elementem, który możemy zrobić
jest po prostu wyciągnięcie definicji typów procesów do np.
interfejsów bądź aliasu typu.
Zatem jeżeli teraz określimy typ, a
następnie przekażemy go tutaj, no to definicja naszego komponentu
funkcyjnego jest kompletna i jedyne co musimy tutaj zrobić to usunąć zawartość
tego komponentu, ponieważ nie wykorzystujemy tutaj children.
Uwierz lub nie, ale jeżeli chodzi o
wykorzystanie komponentów funkcyjnych tak naprawdę to byłoby na tyle.
Ale oczywiście, wszystko to, co powiedziałem teraz, należy połączyć z
wiedzą zawartą w poprzednich lekcjach, dotyczącą typowania wzorców.
Tymczasem z mojej strony to już wszystko i słyszymy się za chwilę w kolejnej lekcji.