0Pricing
TypeScript Academy · Урок

Тип Effect

Разберитесь в Effect

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

Тип Effect

Центральным типом является Effect<Success, Error, Requirements>. Его три параметра типа описывают всё, что может делать вычисление: что оно производит, как может завершиться с ошибкой и что ему требуется.

import { Effect } from "effect";
// Effect<A, E, R>
//   A = success value type
//   E = error type
//   R = required services (dependencies)

Канал успешного результата (A)

Первый параметр — значение, создаваемое при успехе. Effect.succeed создаёт эффект, который всегда выдаёт значение без ошибок и требований.

import { Effect } from "effect";

const ok = Effect.succeed(42);
// Effect<number, never, never>

Канал ошибок (E)

Второй параметр — типизированная ошибка. never означает, что эффект не может завершиться с ошибкой. Реальный тип ошибки означает, что вызывающая сторона должна учесть её.

import { Effect } from "effect";

class NotFound { readonly _tag = "NotFound"; }
const failing = Effect.fail(new NotFound());
// Effect<never, NotFound, never>

Канал требований (R)

Третий параметр перечисляет службы, от которых зависит эффект. never означает, что он самодостаточен; в противном случае его нельзя запустить, пока эти службы не будут предоставлены.

// Conceptually:
// Effect<User, NotFound, Database>
// produces a User, may fail with NotFound, needs a Database

Чтение сигнатуры

Тип эффекта можно прочитать как предложение: «производит A или завершается с ошибкой E при наличии R». Этот единственный тип заменяет Promise, неявные исключения и скрытые глобальные объекты.

never как нейтральный элемент

never — нейтральное значение для каналов E и R: нет возможной ошибки и нет требуемой зависимости. При композиции типы ошибок и требований накапливаются в виде объединений.

Создание эффектов из значений

Распространённые конструкторы: succeed (чистое значение), fail (типизированная ошибка) и sync (обёртка для синхронного побочного эффекта).

import { Effect } from "effect";

const now = Effect.sync(() => Date.now());
// Effect<number, never, never>

Обёртывание асинхронной работы

Effect.promise и Effect.tryPromise превращают промисы в эффекты; tryPromise позволяет преобразовать отклонение промиса в типизированную ошибку канала E.

import { Effect } from "effect";

const fetchUser = Effect.tryPromise({
  try: () => fetch("/user").then((r) => r.json()),
  catch: (e) => new Error("fetch failed: " + String(e)),
});
// Effect<any, Error, never>

Псевдонимы типов для каналов

Для служб Effect предоставляет Effect.Effect<A, E, R> как полное имя. Каналы независимы: ошибки могут существовать без требований, а требования — без ошибок.

Зачем нужны три канала

Три канала отражают три вещи, из-за которых код трудно анализировать: результат, возможные сбои и контекст выполнения. Именно представление всех трёх в одном типе обеспечивает гарантии безопасности Effect.

Почему это важно

Понимание Effect<A, E, R> — ключ ко всему остальному: композиция объединяет эти каналы, обработка ошибок сужает E, а предоставление зависимостей очищает R. Прочитав тип, Вы точно знаете, что делает вычисление.

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

Подтвердите, насколько хорошо Вы поняли тип Effect.

Итоги

Effect<A, E, R> кодирует в одном типе значение успешного результата, типизированную ошибку и требуемые зависимости. never является нейтральным значением для E и R. Конструкторы вроде succeed, fail, sync и tryPromise создают эффекты с соответствующими каналами.

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

Урок «Тип Effect» бесплатный?

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

Чему я научусь в уроке «Тип Effect»?

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

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

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

Сколько времени занимает урок «Тип Effect»?

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

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

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

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

  1. Зачем нужны системы эффектов
  2. Тип Effect
  3. Композиция эффектов
  4. Каналы ошибок и зависимости
← Назад к TypeScript Academy