TypeScript doskonale współpracuje z React, a jednym z kluczowych elementów tej współpracy jest możliwość precyzyjnego typowania komponentów oraz przekazywanych im danych, czyli propsów. Dzięki temu możemy tworzyć bardziej niezawodne i łatwiejsze w utrzymaniu aplikacje.
W tym wpisie omówimy, jak efektywnie integrować TypeScript z React oraz jak typować komponenty i ich propsy.
Instalacja i konfiguracja TypeScript w projekcie React
Jeśli dopiero zaczynasz pracę z TypeScript w projekcie React, poniżej przedstawiam podstawowy sposób, jak skonfigurować środowisko.
1. Stworzenie nowego projektu React z TypeScript.
Możesz stworzyć nową aplikację React z TypeScript przy użyciu create-react-app:
npx create-react-app my-app --template typescript
2. Dodanie TypeScript do istniejącego projektu. Jeśli masz już istniejący projekt React i chcesz dodać do niego TypeScript, wystarczy zainstalować odpowiednie zależności:
Następnie zmień rozszerzenia plików z .js na .tsx dla komponentów, które będą zawierały JSX, oraz .ts dla pozostałych plików TypeScript.
Typowanie komponentów w React
W React możemy tworzyć dwa główne typy komponentów: komponenty funkcyjne i komponenty klasowe. Oba te typy mogą być w pełni typowane przy użyciu TypeScript.
Komponenty funkcyjne
Najpopularniejszym sposobem tworzenia komponentów w React są obecnie komponenty funkcyjne. TypeScript umożliwia typowanie zarówno danych, które komponent przyjmuje, jak i danych, które zwraca.
W powyższym przykładzie komponent klasowy Greeting ma typowane propsy zgodnie z interfejsem GreetingProps.
Typowanie propsów
Typowanie propsów w TypeScript pozwala określić, jakie dane komponent może przyjmować. Jest to kluczowy aspekt integracji TypeScript z React, ponieważ pozwala na lepsze zabezpieczenie aplikacji przed błędami związanymi z niepoprawnym przekazywaniem danych.
disabled: opcjonalny (oznaczony przez ?) props typu boolean, który domyślnie jest wymagany.
Dzięki TypeScriptowi, podczas użycia komponentu będziesz mieć pewność, że przekazywane dane są zgodne z oczekiwaniami.
Typowanie state i ref
Jeżeli pracujesz z klasowymi komponentami lub używasz stanów (state) i referencji (refs) w funkcyjnych komponentach, TypeScript również pozwala na ich precyzyjne typowanie.
Tutaj useState<number> informuje TypeScript, że count będzie liczbą, natomiast useRef<HTMLInputElement> typuje referencję do elementu HTML input.
Typowanie komponentów z children
W React często tworzymy komponenty, które przyjmują inne elementy Reacta jako children. TypeScript pozwala na typowanie takiego przypadku.
Typ React.ReactNode oznacza dowolny element React, który może być przekazany jako dziecko komponentu (np. tekst, inne komponenty, elementy HTML).
Typowanie defaultProps
Możemy również typować domyślne wartości propsów w TypeScript, co pozwala zapewnić, że nawet jeśli props nie zostanie przekazany, komponent otrzyma jego domyślną wartość.
W tym przykładzie, nawet jeśli props color nie zostanie przekazany, komponent Button ustawi domyślny kolor na blue.
Podsumowanie
TypeScript w połączeniu z Reactem daje niezwykle potężne narzędzie do tworzenia bezpiecznych i skalowalnych aplikacji. Dzięki typowaniu komponentów i propsów możemy uniknąć wielu błędów już na etapie kompilacji, co znacząco poprawia jakość kodu. Kluczowe elementy, które omówiliśmy, to:
Typowanie komponentów funkcyjnych i klasowych.
Precyzyjne definiowanie propsów, w tym opcjonalnych.
Typowanie stanu (state) i referencji (refs).
Praca z komponentami, które mają children.
Użycie domyślnych wartości dla propsów.
To tylko wprowadzenie do integracji TypeScript z React. Jak tylko czas pozwoli przygotuje odrębną serię wpisów gdzie ten cykl, pozwoli nam na sprawniejsze (i szybsze) rozpoczęcie pracy z Reactem.