0Pricing
TypeScript Academy · Урок

Типы 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 — локальная установка не требуется.

Все уроки этого курса

  1. Проблема выбрасывания ошибок
  2. Моделирование типов Result
  3. Типы Option и Maybe
  4. Программирование в стиле Railway
← Назад к TypeScript Academy