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+
Jak dotąd za każdym razem określaliśmy samodzielnie typy danych.
Warto jednak wiedzieć o sytuacjach, w których nie jest to wymagane, ponieważ
TypeScript jest w stanie samodzielnie domyślić się typu.
Taki proces nazywamy inferencją i zobaczmy teraz kiedy on ma miejsce.
Zacznijmy od tego, że to co do tej pory robiliśmy to tak zwane explicit typing,
czyli typowanie dosłowne. W przypadku, tak jak tutaj, deklarowania zmiennej
ma to ogromny sens, ponieważ nie znamy
jeszcze jej wartości, więc informujemy TypeScript, że wartością tej zmiennej będzie tekst.
Ale już w momencie definiowania zmiennej sytuacja się nieco zmienia.
No bo jeżeli mamy tutaj informację o przypisaniu do tej zmiennej liczby to nie ma
żadnego sensu dodatkowe informowanie TypeScriptu,
że mówimy tutaj o typie number.
Nawet mamy tego dowód, ponieważ zwrócił uwagę, że TypeScript od razu określił typ.
W tym momencie jedyny problem jaki do nas ma
polega na tym, że nie zmieniamy wartości tej zmiennej, więc powinniśmy użyć const.
Oczywiście jest to prawda, ale spróbujmy teraz zmienić tą wartość na string.
No i TypeScript,
pomimo tego że nie określiliśmy dla niego typu informuje nas o tym,
że próbujemy zmienić typ zmiennej, który został już określony.
Więc jak widzisz działa to tutaj dokładnie tak samo, z tą
różnicą jednak że nie musimy dodawać nowej składni.
To czy lepiej zapisywać typy za każdym razem czy też nie jest kwestią dyskusyjną.
W mojej opinii, zawsze wtedy gdy nie musimy tego robić, raczej nie powinniśmy.
W końcu i tak będziemy mieć informację o tym, że próbujemy zmienić typ zmiennej.
No ale dobrze - to był akurat prosty przykład.
Spójrzmy teraz na kolejny.
Konkretnie mamy tutaj tablicę zawierającą
liczby. I faktycznie TypeScript ponownie poprawnie określił typ.
Ale co się stanie w momencie gdy w takiej tablicy znajdą się dane innego typu?
Okazuje się, że również w takiej sytuacji TypeScript świetnie sobie radzi.
Jak widzisz wykorzystał tutaj union type do tego, aby określić zawartość tablicy.
Teraz oczywiście gdybyśmy chcieli włożyć do niej dane innego typu otrzymamy błąd.
No i to akurat jest jak najbardziej zrozumiałe.
Ale już to, że TypeScript jest w stanie
tak sprytnie domyślać się typów oczywistym już nie jest.
Warto jednak o tym pamiętać.
Następną sytuacją, w której TypeScript domyśla się typu są funkcje.
Konkretnie chodzi o sytuację, w której do funkcji przekazujemy jakiś określony typ.
To jeżeli zwrócimy wynik jakiegoś
działania, logiczne jest że zwracamy tutaj typ number. I to dokładnie sygnalizuje nam
tutaj TypeScript. Jeżeli chodzi o inferencję typów
interesujące jest również typowanie kontekstowe.
Konkretnie Spójrzmy teraz na taką sytuację.
Nasłuchujemy tutaj zdarzenia kliknięcia, na które chcemy odpowiednio reagować.
W momencie gdy definiuję tutaj colba, który będziemy uruchamiać
TypeScript od razu domyśla się, że mamy tutaj do czynienia z MouseEvent.
A skoro ma taką informację jest w stanie pomagać nam z odczytywaniem właściwości.
Nie muszę chyba podkreślać, że w praktyce jest to niesamowicie przydatne.
W ten sposób kończymy temat inferencji typów A ja zapraszam Cię do kolejnej lekcji.
Explicit typing · 1 min
// Explicit typing
let message: stringImplicit typing · 3 min
// Implicit typing
let counter = 0
counter = "I wanna rock!"
const numbers = [0, 1, 2]
const array = [0, 1, "text"]
array.push(false)
function add(x: number, y: number) {
return x + y
}Contextual typing · 3 min
// Contextual Typing
window.addEventListener("click", (e) => {
console.log(e.clientX)
})