Типы Option и Maybe
Явно моделируйте наличие или отсутствие значения
«Типы Option и Maybe» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.
Моделирование отсутствия
Иногда значение может просто отсутствовать, и сообщать об ошибке не нужно. Тип варианта (также называемый типом «Возможно») явно моделирует наличие или отсутствие значения и служит альтернативой null и undefined.
Определение типа варианта
Вариант — это дискриминируемое объединение с тегом some. Если some равно true, присутствует значение; если false — ничего нет.
type Option<T> =
| { some: true; value: T }
| { some: false };Конструкторы
Вспомогательные функции some и none упрощают создание значений варианта, подобно ok/err для результата.
const some = <T>(value: T): Option<T> => ({ some: true, value });
const none: Option<never> = { some: false };Возврат варианта
Поиск, который может ничего не найти, возвращает вариант вместо T | undefined. Возможность отсутствия явно отражена в типе.
function find<T>(arr: T[], pred: (x: T) => boolean): Option<T> {
const hit = arr.find(pred);
return hit === undefined ? none : some(hit);
}Сужение типа по some
Проверяйте opt.some, чтобы безопасно получить доступ к значению. Компилятор разрешает читать value только внутри ветви, где значение присутствует.
const r = find([1, 2, 3], n => n > 1);
if (r.some) console.log(r.value); // 2
else console.log("not found");Почему не просто пустое значение
null и undefined легко забыть, и они сливаются с другими типами. Явный вариант вынуждает обработать случай отсутствия и ясно показывает, что он предусмотрен намеренно.
Вариант вместо необязательного значения
Оба подхода могут моделировать отсутствие, но вариант — это осознанно выбранная именованная структура, к которой можно добавить вспомогательные функции (map, getOrElse). Это способствует единообразной обработке во всей кодовой базе.
// undefined is implicit and easy to ignore;
// Option is explicit and self-documenting.Вспомогательная функция getOrElse
Чтобы свести вариант к конкретному значению, укажите запасное значение для случая отсутствия. Так обработка отсутствия остаётся в одном очевидном месте.
function getOrElse<T>(o: Option<T>, fallback: T): T {
return o.some ? o.value : fallback;
}
console.log(getOrElse(none, 0)); // 0Преобразование варианта
Функция map преобразует внутреннее значение только тогда, когда оно присутствует, а отсутствие оставляет без изменений. Благодаря этому можно объединять преобразования в цепочку без повторяющихся проверок.
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 }Вариант или результат
Используйте вариант, когда отсутствие не требует объяснения (например, ничего не найдено). Используйте результат, когда ошибка сопровождается пояснением. Выбирайте подход в зависимости от того, нужно ли передать причину.
Композиция вариантов
Поскольку вариант поддерживает map и getOrElse, цепочки необязательных действий остаются понятными, а отсутствие автоматически прерывает цепочку.
const out = getOrElse(mapOpt(find([1,2], n => n > 1), n => n + 100), -1);
console.log(out); // 102Быстрая проверка
Быстрая проверка по этому уроку.
Итоги
Вариант<T> — это { some: true; value } или { some: false }, явно моделирующий отсутствие вместо null. Создавайте его с помощью some/none, сужайте тип по some и используйте такие вспомогательные функции, как getOrElse и map. Выбирайте вариант, когда для отсутствия не нужна причина, а результат — когда причина ошибки важна.
Часто задаваемые вопросы
Урок «Типы Option и Maybe» бесплатный?
Да — полный текст урока «Типы Option и Maybe» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «Типы Option и Maybe»?
Явно моделируйте наличие или отсутствие значения Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Типы Option и Maybe»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Проблема выбрасывания ошибок
- Моделирование типов Result
- Типы Option и Maybe
- Программирование в стиле Railway