Agent Skills
返回列表
💻

fp-ts 实用错误处理

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @org-02qudk26/fp-ts-errors。

技能介绍

问题从哪来

在 TypeScript 里,try/catch 让失败路径从类型里「消失」:调用方不知道函数会抛什么,嵌套捕获又容易变成意大利面。表单校验、多步 API、批量处理时,你往往还要收集全部错误,而不是碰到第一个就停——这和「抛一次、捕一次」的模型天然不对盘。

技能在教什么

核心约定很简单:错误只是数据。用 fp-ts 的 Either(同步)和 TaskEither(异步)把失败显式放进返回值,让编译器能追踪 Left / Right。

  • Either 基础:E.left / E.right 表示失败与成功;E.tryCatch 把会抛异常的代码包成 Either;E.fromNullable 把可空值转成带错误的分支。
  • 链式组合:用 pipe + E.chain 串起可能失败的多步;错误类型不一致时用 E.chainW;第一个 Left 会截断后续步骤,控制流比嵌套 try/catch 清晰。
  • 累积校验:表单等场景用 applicative(如 sequenceS(validation))一次收集字段级错误,而不是只返回第一个。
  • 异步与边界:TaskEither 对应「惰性执行的 Promise<Either>」;在系统边界用 TE.tryCatch、TE.fromTask 等把 Promise/抛异常代码收进来,需要对接外部 API 时再用 fold 或转回 Promise 作为逃生舱。

文档里还给了用户输入解析、带完整错误的 HTTP 调用、列表项部分失败、批量部分成功等真实场景示例,以及 Either / TaskEither 的快速对照表。

适用边界

  • 适合愿意引入 fp-ts 与函数式组合(pipe、chain)的团队;若项目完全拒绝这类依赖,价值主要在模式理解而非即插即用。
  • Either 管同步失败路径;真正 I/O 应走 TaskEither,别混用概念。
  • 遗留代码里大量 throw 和裸 Promise 时,需要在模块边界做转换,而不是指望一次重写全库。

使用场景

  • 在 TypeScript 服务里把多层 try/catch 改成 Either 管道,逐步调用校验、查库、写库且任一步失败都有明确错误类型
  • 为注册/结算表单做字段校验,需要一次返回全部字段错误而不是只提示第一个失败项
  • 封装调用外部 HTTP 或 JSON 解析的代码,用 TaskEither 统一处理网络异常与业务 Left 并在边界 fold 成 API 响应
  • 批量导入或处理列表数据时,部分条目解析失败仍要继续处理其余项并汇总成功与失败结果

适合人员

  • 维护 Node/TS 后端接口、希望错误类型出现在函数签名而非文档里的后端工程师
  • 负责复杂表单与校验 UX、要把「首个错误」改成「全量字段反馈」的前端或全栈工程师
  • 已在项目里使用 fp-ts、需要把遗留 throw/Promise 代码在模块边界接入 Either/TaskEither 的维护者
  • 编写 CLI 或脚本解析用户输入与配置文件、想用 Result 模式替代散落 try/catch 的 TypeScript 开发者