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+
Tą lekcją zbliżamy się do końca naszej nauki zaawansowanego typescriptu
i w związku z tym chciałbym wykorzystać tą szansę do tego aby podzielić
się z tobą pewną praktyką mianowicie za każdym razem gdy uczę się
czegoś nowego zawsze wyszukuję sobie informacji na temat dobre praktyki
w czymś lub złe praktyki w czymś zwykle pod takimi
hasłami trafiam na firmy bądź artykuły różnych ekspertów z danego
tematu którzy dzielą się swoim doświadczeniem właśnie w zakresie
dobrych i złych praktyk jest to świetny sposób na to aby przenieść swoją
wiedzę kilka poziomów wyżej właśnie przez stosowanie tych najlepszych praktyk
lub unikanie tych popularnych błędów i jeżeli chodzi o
typescript to mam dwie takie strony które mogę ci śmiało polecić jedna
z nich pochodzi bezpośrednio ze strony typescriptu gdzie znajduje się
artykuł o nazwie do's and don'ts czyli zasadniczo jest to
zbiór zasad prezentujący nam zarówno te dobre jak i złe praktyki jest
tu naprawdę wiele sugestii które na tym etapie czyli po ukończeniu moich kursów
jesteś w stanie dobrze zrozumieć i wykorzystać w praktyce drugim
takim źródłem jest artykuł pochodzący bezpośrednio z bloga zalando w
którym również jedna z programistek opisała najlepsze praktyki pracy
z typescriptem i to jest znowu artykuł z którym zdecydowanie
warto się zapoznać jeżeli chodzi o mnie to wybrałem kilka takich tematów
o których warto wspomnieć czy właściwie warto je podkreślić pierwszym
z nich jest wykorzystanie konfiguracji strict w pliku konfiguracyjnym tsconfig
konkretnie ustawienie tych oto opcji sprawia że wykorzystujemy tutaj
potencjał typescriptu oraz jednocześnie możemy w wielu aspektach liczyć
na jego pomoc oczywiście pamiętaj też o tym że w momencie gdy
migrujesz projekt z javascriptu jeżeli masz taką potrzebę część z
tych opcji możesz wyłączyć natomiast docelowy scenariusz powinien uwzględniać
je wszystkie kolejną rzeczą o której warto pamiętać jest inferencja
typów o niej już mówiłem w kursie podstawowym i zasadniczo
jak już doskonale powinieneś wiedzieć jest to mechanizm polegający na tym że
typescript jest w stanie określić typ bez konieczności tego abyśmy
to my podawali go za każdym razem bo jak widzisz typescript poprawnie
tutaj określił tutaj typ danych ustawiony jako string literal type dla ciagu Adam
w związku z tym nie ma najmniejszej potrzeby abym tutaj określał ten
typ samodzielnie podobnie ma się to w przypadku na przykład funkcji tutaj
typescript nie miałby pojęcia jaki typ zmiennej przekazujemy do tej funkcji w
związku z tym to określiłem ale już typ zwracany przez tą funkcję
jest określony bezpośrednio przez typescript dzięki temu że pomijamy te
definicje typów które nie są faktycznie potrzebne zwiększamy czytelność
kodu i jednocześnie zmniejszamy jego rozmiar tak że bez wątpienia jest to
szczególnie istotne kolejną rzeczą o której chciałbym wspomnieć jest fakt
że w typescripcie powinniśmy unikać słowa null w zamian możemy
wykorzystywać undefined i to dokładnie z tego powodu że w momencie
gdy na przykład parametr funkcji jest opcjonalny bądź na przykład właściwość jakiegoś
obiektu jest opcjonalna to zwróć uwagę że typescript nie obsługuje
tutaj wartości null w związku z tym jeżeli przekażemy do takiej funkcji
wartości null a następnie odwołamy się do jej właściwości no
to w trakcie wykonywania programu otrzymamy błąd oczywiście
typescript na ten moment informuje mnie o tym że taka ewentualność może nastąpić
natomiast wystarczy że wyłączyli byśmy właściwość strict w pliku konfiguracyjnym no
i możemy czekać na błędy kolejną rzeczą o której warto pamiętać
o ile jeszcze tego nie robisz to wykorzystanie prettiera bądź eslint
dobranie tych narzędzi pozostawiam już tobie natomiast chodzi
tutaj o to aby pilnować stylu w jakim piszemy kod czyli
i jak widzisz tutaj zabrakło mi spacji ale już w momencie gdy zapiszę ten
plik visual studio code za mnie poprawia ten kod zgodnie
z określonymi przeze mnie zasadami i teraz ostatnią rzeczą
którą co prawda nawet można nie połączyć z samym typescriptem jest fakt
że jeżeli do jakiejś funkcji przekazujesz dużo parametrów no to
całkiem dobrym pomysłem jest to aby zamknąć je w obiekcie dzięki temu
jak widzisz tutaj podajemy po prostu obiekt data i w tej sytuacji nie
musimy dbać chociażby o kolejność tych parametrów no i jednocześnie łatwiej
jest utworzyć taki cały obiekt a następnie w całości przekazać go do funkcji
i to by było na tyle jeżeli chodzi o takie ogólne dobre praktyki z mojej
strony natomiast zdecydowanie polecam ci przeczytanie tych dwóch
artykułów które zdecydowanie rozszerzają ten temat a jednocześnie
ja nie chcę się tutaj powtarzać zachęcam cię również do samodzielnego wyszukania
artykułów na przykład na medium do tego aby poznać perspektywę różnych programistów
właśnie pod kątem dobrych i złych praktyk na sam koniec dodam
tylko że taką złą praktyką której zdecydowanie powinieneś unikać
jest zostawienie rzeczy na później chodzi mi tutaj o to że typescript
bez wątpienia dokłada nam trochę pracy w zamian zyskujemy wiele
różnych korzyści no ale jednak tego kodu trzeba pisać więcej to rodzi
pokusę do tego aby w wielu miejscach stosować typ any bądź w ogóle
pomijać definicję typów i co za tym idzie wyłączać różne
denerwujące opcje kompilera efekt tego jest taki że
to prowadzi nas do miejsca w którym zdecydowanie nie chcielibyśmy się znaleźć w
przyszłości po prostu jeżeli decydujesz się na wykorzystanie typescriptu
dbaj o to aby pisać kod uzupełniony o typy i jednocześnie
czerpać z tego typescriptu jak najwięcej korzyści w przeciwnym razie jeżeli
pisząc taki kod pojawiają się błędy których mógłbyś łatwo uniknąć no
to pretensje możesz mieć chyba tylko do siebie i w ten oto taki trochę
ostrzegawczy sposób kończymy naukę typescriptu w tym kursie
a ja zapraszam cię teraz do ostatniej lekcji
https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html
https://engineering.zalando.com/posts/2019/02/typescript-best-practices.html
Strict configration · 2 min
{
"compilerOptions": {
// Strict configuration
"strict": true,
"forceConsitentCasingInFileNames": true,
"noImplicitReturns": true,
"noUnusedLocals": true
}
}Object as payload · 4 min
// Use objects as payloads for functions
type SendMail = (type: string, from: string, to: string, subject: string) => Boolean;
type SendMail2 = (type: string, data: { from: string; to: string; subject: string }) => Boolean;Non-existing-values · 4 min
// Non-existing values
interface Song {
title: string;
}
const getTitle = (song?: Song) => song.title;