用途:在采用 Effect 库的仓库中提供编程指导,覆盖错误处理、依赖注入、可组合性与测试模式。
前置条件:使用前须确认仓库根目录存在 ./.repos/effect;若不存在,应停止并提示用户按 ./references/setup.md 中的设置任务操作。
研究策略:Effect 实现同一任务的方式很多,中高复杂度任务应主动研究最佳实践。优先使用 ./references/ 下的本地指南;仅当指南未覆盖、需要精确 API 签名、更深入实现细节或需对照源码验证行为时,才直接查阅内置 Effect 仓库。研究顺序为本地指南、当前项目代码模式、最后是 ./.repos/effect/packages/effect/src/ 源码。
何时研究:服务、Layer 或复杂依赖注入;多错误类型或复杂错误层级;流式与响应式模式;作用域资源管理与清理;并发或性能关键代码;不熟悉的测试模式;从 Promise 或 try/catch 重构为 Effect;新增服务依赖或 Layer 重构;自定义错误类型;与数据库、API 等外部系统集成。
指南发现:涉及核心用法查 guide-effect.md,错误处理查 guide-error-handling.md,服务与 Layer 查 guide-layers.md,可观测性查 guide-observability.md,重试查 guide-retries.md,调度查 guide-schedule.md,Schema 查 guide-schema.md,SQL 查 guide-sql.md,测试查 guide-testing.md。
安装与版本:安装 Effect 包时使用 effect@beta;所有 @effect/* 包保持版本对齐,不混用不相关版本;仅安装运行时和任务实际需要的包。Node.js 用 @effect/platform-node,浏览器用 @effect/platform-browser,Bun 用 @effect/platform-bun,Vitest 用 @effect/vitest,OpenTelemetry 用 @effect/opentelemetry。
核心原则:用类型化错误系统而非抛异常,优先 Schema.TaggedErrorClass,使用 Effect.fail、Effect.catchTag、Effect.catch;用 Context.Tag 定义服务,Layer.merge 与 Layer.provide 组合,在边界用 Effect.provide 注入;用 Effect.succeed、Effect.fail、Effect.tryPromise、Effect.try、Effect.sync 等构造器,配合 Effect.flatMap、Effect.map、Effect.tap;可复用业务函数优先 Effect.fn,不用 Effect.fnUntraced 作默认。TypeScript 中禁止 any、as 断言、namespace,外部边界数据应校验或解码。
限制:资料未提供具体收费、价格、平台支持范围或效果保证等信息。