0Pricing
TypeScript Academy · Lekcja

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)); // 0

Mapowanie 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); // 102

Szybki 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

  1. Problem z rzucaniem błędów
  2. Modelowanie typów Result
  3. Typy Option i Maybe
  4. Programowanie zorientowane na tory
← Powrót do TypeScript Academy