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 pokażę Ci, jak dodawać typy w przypadku wykorzystania Rebecca.
Z tego powodu stworzymy sobie prostą
aplikację wyświetlające nasz aktualny stan, wewnątrz którego będziemy
przechowywać liczbę oraz kilka przycisków, z pomocą których
będziemy zwiększać, pomniejszać oraz resetować status tego stanu.
Z tego powodu do każdego z tych przycisków przypisze również odpowiednią akcję.
No i teraz nasze zadanie polega na tym, aby skonfigurować Dexa do tego, aby
obsługiwać nasz stan oraz jego zmianę, czyli te poszczególne akcje.
Aby to zrobić utworzymy sobie teraz nowy plik, który umieścimy w katalogu
C wewnątrz podkatalogów state oraz width users.
Plik będzie nosił nazwę Content read user i wewnątrz niego zapiszemy nasz user.
Zatem zaczniemy od zdefiniowania funkcji
przyjmującą state oraz akcję, którą od razu będziemy eksportować.
Następnie musimy zdefiniować sobie initial
state, które przypisujemy jako domyślną wartość pierwszego parametru.
Idąc dalej wykorzystujemy instrukcję
warunkową switch do tego, aby przełączać się pomiędzy typem akcji i na tej
podstawie rozpoznawać to, z którą mamy w danej chwili do czynienia.
Zatem mamy tutaj akcje dodawania, odejmowania oraz resetowania.
No i oczywiście mamy też akcję domyślną, która zwraca nam nasz bieżący stan.
W przypadku akcji dodawania oczywiście dodajemy przekazaną wartość, w przypadku
odejmowania odejmujemy, a w przypadku resetowania ustawiamy nasz stan na 0.
I tutaj jak widzisz, w związku z tym, że nasz stan jest naprawdę bardzo prosty,
Time script był w stanie domyślić się jego typu.
Natomiast w przypadku bardziej złożonych obiektów musielibyśmy tutaj utworzyć np.
interfejsy lub alias typu do tego, aby określić strukturę naszego stanu.
Niestety na ten moment Tate nie jest w stanie określić typu akcji.
Zatem musimy teraz stworzyć interfejs, z pomocą którego dokładnie to co robimy.
No i tutaj mamy pewne schody polegające na tym, że typ naszej akcji będzie różni się
w zależności od tego, z jaką akcją mamy do czynienia.
Czyli nasza akcja będzie posiadać dwie właściwości, czyli typ oraz paletę.
Podobnie będzie w przypadku odejmowania.
Natomiast w przypadku resetowania nie
będziemy przekazywać z żadnego pawilonu, bo wystarczy nam przekazanie typu.
Z tego powodu dla naszej akcji musimy
utworzyć alias typu będącą unią typów poszczególnych akcji.
W ten sposób, jeżeli teraz wykorzystamy
ten alias do opisania naszych akcji, wszystko będzie tutaj w porządku.
Mało tego, jeżeli przykładowo tutaj
będziemy próbowali wykorzystać bailout, otrzymamy ostrzeżenie od tekstu
informujące nas o tym, że nie możemy tego zrobić.
Podobnie zresztą będzie w pozostałych
przypadkach, gdy będziemy próbowali przekazać tutaj jakiś inny typ.
To co jest jeszcze istotne, to fakt, że typ naszych akcji będziemy sobie
eksportować, ponieważ za chwilę będziemy po nie sięgać.
Na ten moment jeszcze utworzymy sobie plik
index wewnątrz katalogu users, z pomocą którego wyeksportować mamy
wszystkie edit, a w tym przypadku ten jeden.
Zatem wykorzystamy metodę Container
Radius, do której przekażemy obiekt zawierający właściwość counter, do którego
przypiszemy nasz Counter User od razu tutaj wyeksportowane tą wartość oraz
zadbam o to, aby wyeksportować sobie również typ naszego stanu.
I tutaj aby go utworzyć wykorzystamy
Editor Type, do którego przekażemy of naszego DDS.
W ten sposób wszystko jest tutaj załatwione oprócz samych importów.
No i teraz mogę zaimportować tą metodę i
oczywiście muszę zadbać o to, aby zaimportować Center Feed User.
W tej chwili wszystko jest tutaj gotowe, a my możemy pójść dalej.
Konkretnie utworzymy sobie drugi katalog w podkatalogu state o nazwie Action created.
Wewnątrz niego umieścimy plik index,
który posłuży nam do tego, aby zdefiniować kreatory naszych akcji.
Zatem pierwszą funkcją będzie funkcja Add przyjmująca jako wartość waluty number
i wewnątrz niej będziemy zwracać nową funkcję przyjmującą jako parametr DSP.
I wewnątrz tej funkcji wywołujemy DSP, do którego przekazujemy obiekt naszej akcji.
Ten obiekt będzie zawierał właściwość TAP oraz oczywiście Chillout.
Tutaj oczywiście w tej chwili mamy błąd
informujący nas o niejawnym typie Emy, więc musimy tutaj dodać typ DSP.
Tutaj musimy zaimportować ACT,
jednak tutaj dalej mamy błąd informujący nas o tym, że DSP jest typem genetycznym,
do którego musimy przekazać typ naszej akcji.
Zatem importujemy sobie teraz akcję, no i
w tej chwili wszystko jest tutaj w porządku.
Zatem mogę skopiować tą metodę i odpowiednio utworzyć akcję sub.
Oraz DJ i set.
W tej sytuacji oczywiście natychmiast mamy informację o tym, że nie możemy tutaj
przekazać PLN, ponieważ typ akcji na to nie pozwala.
No i w tym momencie, jeżeli mamy zdefiniowane nasze kreatory
i jesteśmy w stanie je wykorzystać jeszcze zanim to będzie możliwe w głównym
katalogu, to utworzymy sobie index CS, wewnątrz którego utworzymy nasz store.
Zatem wykorzystamy tutaj metodę Create, do której przekażemy nasze wid.
Za chwilę.
Importujemy pusty obiekt oraz metodę Add limit.
Warto, której przekażemy.
Tak.
Za importuje sobie teraz tę metodę, aby wszystko tutaj było poprawne.
No i na samym końcu mamy jeszcze tank
middleware, które importujemy z Tidak Stark.
Upewnij się jeszcze tylko proszę, że dodałeś go do swoich zależności.
Na ten moment wygląda na to, że jeszcze
się pomyliłem, ponieważ nie będzie to plik index TS tylko plik stories.
Natomiast plik index ts posłuży nam do
tego, aby wyeksportować sobie poszczególne elementy do naszego Stora.
I tutaj jeszcze jedna mała literówka.
Oczywiście mamy tutaj nazwę Users.
W tym momencie jesteśmy gotowi do tego,
aby wykorzystać nasz cały stat wewnątrz naszej aplikacji.
I tutaj w pierwszej kolejności w pliku index TS musimy wykorzystać provider i
opakować nim nasz główny komponent aplikacji.
No i teraz musimy jeszcze zaimportować nasz Provider oraz Store.
No i teraz jesteśmy gotowi do tego, aby
przejść do głównego komponentu naszej aplikacji.
I tutaj na początek importuje wszystkie
niezbędne metody, a następnie wykorzystamy hooka Use this patch oraz za importujemy
wykorzystując Bind Action Creator, przekazując do Action Create
metodę DC Patch i jesteśmy w stanie zaimportować wszystkie akcje, które
będziemy wykorzystywać w przypadku naszych przycisków.
Ostatnią rzeczą, o którą musimy zadbać jest zaimportowania naszego stanu i w tym
celu wykorzystamy hooka Selector, który będzie przyjmował stan i zwracał część
naszego stanu dotyczącą campera, czyli dokładnie to, co określiliśmy tutaj.
W tym momencie mamy tutaj oczywiście błąd,
ponieważ nie przekazaliśmy tutaj odpowiedniego typu naszego stanu.
Jeżeli to poprawimy, nasza aplikacja
będzie działać i jeżeli teraz przejdziemy sobie do przeglądarki, no to okaże się, że
rzeczywiście wszystko jest tutaj w porządku.
Nasza aplikacja działa, a my zbliżyliśmy się do końca tej lekcji.
Zatem jak widzisz, jeżeli chodzi o
wykorzystanie typów pracy, przede wszystkim musimy pamiętać o tym,
aby tworząc nasz edit user uwzględnić odpowiedni typ naszego stanu.
I w naszym przypadku było to proste,
ponieważ wykorzystaliśmy tutaj wyłącznie liczbę.
Natomiast często może zdarzyć się tak, że będzie tutaj bardziej złożony obiekt, więc
będziemy musieli utworzyć odpowiedni interface bądź alias typu.
Następnie musimy zadbać również o typ naszych akcji.
I tutaj najlepszym sposobem jest wykorzystanie interfejsów do tego, aby
opisać poszczególne akcje, a następnie połączyć je z wykorzystaniem aliasu typu,
do którego przypisujemy unię tych poszczególnych interfejsów.
Następnie musimy zadbać również o to, aby Action posiadał informacje na temat typu
deathmatch, do którego przekazujemy typ naszej akcji.
Dzięki temu upewnimy się, że struktura
naszych akcji jest dokładnie taka, jaką zdefiniowaliśmy w typach.
No i ostatnim ważnym elementem będzie to,
aby wykorzystać tutaj Vito Type do tego, aby utworzyć typ naszego stanu.
To wszystko sprawia, że jesteśmy w stanie
wykorzystać nasz cały tor do tego, aby operować na naszym stanie.
I tutaj jeszcze tylko korzystając z
Selector musimy upewnić się, że przekażemy tutaj odpowiedni typ naszego stanu.
No i tak w zasadzie w temacie wykorzystania typów DB.
To byłoby na tyle, co chciałbym Ci
powiedzieć, ale oczywiście muszę zaznaczyć, że im bardziej złożona
aplikacja, tym więcej będzie się tutaj działo.
Natomiast na ten moment masz absolutne podstawy do tego, aby po prostu zacząć
działać, a mi nie pozostaje nic innego jak po prostu podziękować Ci za uwagę.
Cześć!