Effect 类型
理解 Effect 。
Effect 类型 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 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阅读签名
您可以把效应类型读成一句话:“给定 R,产生 A,或者以 E 失败”。这一个类型取代了承诺、隐式抛出以及隐藏的全局变量。
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 类型」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 4 节课。
「Effect 类型」这节课中我会学到什么?
理解 Effect 。 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 TypeScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「Effect 类型」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 TypeScript Academy 课中编写并运行代码吗?
能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。