Typy Option i Maybe
Jawnie modeluj obecność lub brak wartości
Typy Option i Maybe to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 4 lekcji w sumie.
Modelowanie braku wartości
Czasami wartość może być po prostu nieobecna i nie ma żadnego błędu do zgłoszenia. Option (nazywany także Maybe) jawnie modeluje obecność albo brak wartości i stanowi alternatywę dla null oraz undefined.
Definiowanie Option
Option jest unią dyskryminowaną z oznaczeniem some. Gdy some ma wartość true, dostępna jest wartość; gdy ma wartość false, niczego nie ma.
type Option<T> =
| { some: true; value: T }
| { some: false };Konstruktory
Funkcje pomocnicze some i none ułatwiają tworzenie wartości Option, podobnie jak ok/err w przypadku Result.
const some = <T>(value: T): Option<T> => ({ some: true, value });
const none: Option<never> = { some: false };Zwracanie Option
Wyszukiwanie, które może niczego nie znaleźć, zwraca Option zamiast T | undefined. Opcjonalność jest wtedy jawnie wyrażona w typie.
function find<T>(arr: T[], pred: (x: T) => boolean): Option<T> {
const hit = arr.find(pred);
return hit === undefined ? none : some(hit);
}Zawężanie za pomocą some
Należy sprawdzić opt.some, aby bezpiecznie uzyskać dostęp do wartości. Kompilator pozwala odczytać value wyłącznie w gałęzi oznaczającej obecność wartości.
const r = find([1, 2, 3], n => n > 1);
if (r.some) console.log(r.value); // 2
else console.log("not found");Dlaczego nie użyć po prostu null?
O null i undefined łatwo zapomnieć, a ponadto zlewają się z innymi typami. Jawny Option wymusza obsłużenie przypadku braku wartości i jasno pokazuje, że jest on zamierzony.
Option a T | undefined
Oba rozwiązania mogą modelować brak wartości, ale Option jest świadomie zaprojektowaną, nazwaną strukturą, do której można dołączyć funkcje pomocnicze (map, getOrElse). Zachęca to do spójnej obsługi w całej bazie kodu.
// undefined is implicit and easy to ignore;
// Option is explicit and self-documenting.Funkcja pomocnicza getOrElse
Aby sprowadzić Option do konkretnej wartości, należy podać wartość zastępczą na wypadek braku. Dzięki temu obsługa braku wartości znajduje się w jednym oczywistym miejscu.
function getOrElse<T>(o: Option<T>, fallback: T): T {
return o.some ? o.value : fallback;
}
console.log(getOrElse(none, 0)); // 0Mapowanie wartości Option
map przekształca wewnętrzną wartość tylko wtedy, gdy jest obecna, pozostawiając brak wartości bez zmian. Umożliwia to łączenie przekształceń bez wielokrotnego sprawdzania.
function mapOpt<T, U>(o: Option<T>, f: (t: T) => U): Option<U> {
return o.some ? some(f(o.value)) : none;
}
console.log(mapOpt(some(5), n => n * 2)); // { some: true, value: 10 }Option a Result
Należy używać Option, gdy brak wartości nie ma przyczyny, którą trzeba przekazać (na przykład wyszukiwanie niczego nie znalazło). Result należy stosować, gdy błąd ma opis wyjaśniający. Wybór zależy od tego, czy trzeba przekazać informację, dlaczego wystąpił błąd.
Łączenie wartości Option
Ponieważ Option ma metody map i getOrElse, łańcuchy opcjonalnych kroków pozostają czytelne, a brak wartości automatycznie przerywa dalsze kroki.
const out = getOrElse(mapOpt(find([1,2], n => n > 1), n => n + 100), -1);
console.log(out); // 102Szybki test
Szybki test z tego tematu.
Podsumowanie
Option<T> to { some: true; value } albo { some: false }, jawnie modelujący brak wartości zamiast używania null. Należy tworzyć go za pomocą some/none, zawężać typ na podstawie some oraz używać funkcji pomocniczych takich jak getOrElse i map. Option warto stosować, gdy brak wartości nie wymaga podania przyczyny, a Result — gdy błąd takiej przyczyny wymaga.
Często zadawane pytania
Czy lekcja „Typy Option i Maybe” jest bezpłatna?
Tak — pełny tekst „Typy Option i Maybe” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Typy Option i Maybe”?
Jawnie modeluj obecność lub brak wartości Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?
Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Typy Option i Maybe”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?
Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Problem z rzucaniem błędów
- Modelowanie typów Result
- Typy Option i Maybe
- Programowanie zorientowane na tory