热榜
#开发工具

Effect-TS/effect

把类型化错误、依赖注入、结构化并发和链路追踪统一进一个 Effect 系统,面向大型 TypeScript 服务端代码库。

17,376
875
TypeScript
MIT
上线 6 年

解决什么问题

TypeScript 项目长大后,难点不再是语法,而是协调:这个函数究竟会抛哪些错、服务怎么注入、请求取消时在途任务如何处理、这条调用链的 trace 断在哪里。团队通常为每件事各挑一个库再加一堆约定,而问题恰恰出在这些库的接缝处。Effect 的做法是把这些关注点都变成同一个带类型的值,组合之后统一运行。

有什么不同

常规 TypeScript 代码用 throw 处理错误、用工厂函数或 DI 容器做装配、用裸 Promise 或 async 处理并发。Effect 改为把计算描述成一个可组合的值再执行,因此错误、所需服务和取消行为都体现在类型签名里。与 fp-ts 相比,Effect 自带完整的运行时——结构化并发、调度、追踪、Schema 校验——而不只是最小的类型类集合;与 InversifyJS 这类 DI 容器相比,依赖注入只是同一抽象的一个属性,而非另一套系统。代价也很实在:你要接受一套独立的编程模型和很大的 API 面,换来的是这些关注点处理方式的一致性。

适合谁

适合开发长期维护的 TypeScript 服务——API、后台任务、数据管道——且失败、取消和可观测性比上手速度更重要的团队,也适合希望多个服务共用一套约定的平台团队。如果只是写小脚本、前端原型,或者团队里多数人不熟悉函数式组合,就不要用了,这个规模下学习成本大于收益。不愿开启 strict 的团队可以直接排除。

上手成本

README 写得很明确:需要 TypeScript 5.9 及以上(推荐 7)、Node.js 18 及以上作为通用下限,并且 tsconfig.json 必须开启 strict。安装本身只是一条 npm install effect,真正的成本在概念上——开发者要先理解新的执行模型才能产出。这个 monorepo 还发布了大量集成包(platform、各类 SQL 客户端、OpenTelemetry、Vitest 辅助),版本同步发布,实际引入的往往不止核心包。缓解因素:MIT 协议;4.x 承诺 LTS,至少三年支持,且给出下一大版本后的缺陷修复与安全修复窗口;并提供 3.x 迁移指南。README 本身以链接和包列表为主,并不教你模型本身,需要预留看官网文档和逛 Discord 的时间。

点评

这是一个成熟项目而非一时热度:2019 年创建,约 17.4k stars,最近一个月在 TypeScript 月榜上新增约 1,237 stars(第 11 名)。多年积累叠加近期动能,说明关注度在持续爬升而非单点爆发,LTS 承诺也表明维护者准备让它被长期依赖。没上过日榜只是意味着增长平缓、不病毒式传播。如果你的团队已经在大体量 TypeScript 服务里被分散的错误处理和 DI 约定折磨,值得认真评估;如果只是想找个异步工具,它太重了。

Hacker News 讨论

Effect, a functional effect system for TypeScript with a rich standard library
▲ 3 · 1 条评论 · 2023年7月8日

本文由 AI 根据项目 README 生成,更新于 2026年10月24日,以项目官方文档为准。