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