Effect 有一个免费 TypeScript 库 — TS 缺失的标准库

发布: (2026年3月28日 GMT+8 14:35)
4 分钟阅读
原文: Dev.to

Source: Dev.to

问题:TypeScript 没有标准库

Python 附带了 osjsondatetimecollectionsitertools 等模块。
Go 提供了 net/httpencoding/jsonfmt 等包。

而 TypeScript 则依赖 npm 生态系统:

  • 想要重试?安装一个包。
  • 想要模式验证?再装一个包。
  • 想要完善的错误处理?再装一个包。
  • 想要并发控制?再装一个包。

Effect:一个全面的 TypeScript 库

Effect 是一个免费的 TypeScript 库,为语言带来了缺失的标准库。它可以处理:

  • 错误(具备完整的类型安全)
  • 并发与并行
  • 重试和退避策略
  • 流式处理
  • 依赖注入
  • 以及更多…

错误成为类型的一部分

// 在普通的 TypeScript 中,错误是不可见的。
async function getUser(id: string): Promise {
  const res = await fetch(`/api/users/${id}`)   // NetworkError?
  const data = await res.json()                // ParseError?
  return UserSchema.parse(data)                // ValidationError?
}
// 使用 Effect,错误是类型签名的一部分。
import { Effect } from 'effect'

const getUser = (id: string): Effect.Effect => { /* implementation */ }

TypeScript 强制你处理错误

const result = getUser('123').pipe(
  Effect.catchTag('NetworkError', () => fallbackUser),
  Effect.catchTag('ParseError', () => Effect.fail(new AppError()))
)

示例

带指数退避的重试

import { Effect, Schedule } from 'effect'

const fetchWithRetry = fetchData.pipe(
  Effect.retry(
    Schedule.exponential('1 second').pipe(
      Schedule.compose(Schedule.recurs(3))
    )
  )
)
// 重试 3 次,采用指数退避。类型安全。无需额外库。

带并发限制的并行处理

const results = Effect.forEach(
  items,
  (item) => processItem(item),
  { concurrency: 10 }
)

通过 Context 和 Layer 实现依赖注入

import { Context, Effect, Layer } from 'effect'

class Database extends Context.Tag('Database') Effect.Effect } // (original snippet)

// 你的代码声明它需要什么
const getUsers = Database.pipe(
  Effect.flatMap(db => db.query('SELECT * FROM users'))
)

// 测试提供一个 mock
const testLayer = Layer.succeed(Database, {
  query: () => Effect.succeed([{ id: 1, name: 'Test' }])
})

// 生产环境提供真实实现
const prodLayer = Layer.succeed(Database, {
  query: (sql) => pgPool.query(sql)
})

典型使用场景

  • 具有多种失败模式的复杂业务逻辑
  • 需要重试、超时和并发控制的数据管道
  • 需要结构化错误处理的后端服务
  • 希望减少运行时意外的团队
  • 简单的 CRUD 应用
  • 前端组件和 UI 逻辑
  • 脚本和一次性任务
  • 对函数式编程概念尚不熟悉的团队

安装

npm install effect

联系方式

如果你需要定制方案或有任何疑问,欢迎随时联系:

构建数据管道?在 Apify 上已有超过 88 个生产爬虫为你处理重试、速率限制和反爬措施。

0 浏览
Back to Blog

相关文章

阅读更多 »

MCP的七宗罪:运营罪

操作罪:懒惰与愤怒 这些罪行属于此类别,因为它们决定了实时 MCP 系统在压力下的行为方式:它是否真实地失败……