0Pricing
TypeScript Academy · Урок

Шаблон Result: Ok и Err

Возвращайте ошибки как значения вместо их выбрасывания

«Шаблон Result: Ok и Err» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 4 уроков всего.

Добро пожаловать

Паттерн результата возвращает ошибки как значения, обеспечивая типобезопасную обработку ошибок без try/catch.

Тип результата

Определите обобщённый тип результата с вариантами успеха и ошибки.
type Ok<T> = { ok: true; value: T };
type Err<E = Error> = { ok: false; error: E };
type Result<T, E = Error> = Ok<T> | Err<E>;

Вспомогательные конструкторы

Создайте вспомогательные функции ok() и err() для более понятного кода.
const ok = <T>(value: T): Ok<T> => ({ ok: true, value });
const err = <E>(error: E): Err<E> => ({ ok: false, error });

Возврат результатов

Возвращайте результаты из функций вместо выбрасывания ошибок.
async function fetchUser(id: number): Promise<Result<User>> {
  try {
    const user = await db.findUser(id);
    if (!user) return err(new Error('Not found'));
    return ok(user);
  } catch (e) { return err(e as Error); }
}

Использование результатов

Проверьте флаг ok перед использованием значения.
const result = await fetchUser(1);
if (result.ok) {
  console.log(result.value.name); // User
} else {
  console.error(result.error.message);
}

Вспомогательная функция mapResult

Преобразуйте успешный результат, чтобы изменить его значение.
function mapResult<T, U, E>(r: Result<T, E>, fn: (v: T) => U): Result<U, E> {
  return r.ok ? ok(fn(r.value)) : r;
}

Вспомогательная функция flatMapResult

Безопасно объединяйте функции, возвращающие результаты.
function flatMap<T, U, E>(r: Result<T, E>, fn: (v: T) => Result<U, E>): Result<U, E> {
  return r.ok ? fn(r.value) : r;
}

Результаты и исключения

Исключения неявны и не типизированы. Результаты — это явные значения, указанные в сигнатуре типа.

Поддержка библиотек

Библиотеки neverthrow, true-myth и fp-ts предоставляют готовые для использования в production типы результатов.

Результаты в обработчиках API

Используйте результаты в обработчиках Express для чистой передачи ошибок.
app.get('/users/:id', async (req, res) => {
  const result = await fetchUser(parseInt(req.params.id));
  if (result.ok) res.json(result.value);
  else res.status(404).json({ error: result.error.message });
});

Асинхронные результаты

Используйте Promise>, чтобы сочетать асинхронность с паттерном результата.
type AsyncResult<T, E = Error> = Promise<Result<T, E>>;

Быстрая проверка

В чём главное преимущество паттерна результата по сравнению с выбрасыванием исключений?

Итоги

Паттерн результата: варианты успеха и ошибки. Вы изучили основные понятия этой темы и узнали, как применять их в реальных проектах на TypeScript.

Часто задаваемые вопросы

Урок «Шаблон Result: Ok и Err» бесплатный?

Да — полный текст урока «Шаблон Result: Ok и Err» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «Шаблон Result: Ok и Err»?

Возвращайте ошибки как значения вместо их выбрасывания Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Шаблон Result: Ok и Err»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

  1. Типизированные классы ошибок и иерархии
  2. Шаблон Result: Ok и Err
  3. Сужение перехваченных ошибок: unknown и Error
  4. Обработка ошибок в асинхронном коде TypeScript
← Назад к TypeScript Academy