Agent Skills
返回列表
💻

fp-ts 务实函数式编程

开发编程 更新于 2026.08.29

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

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

技能介绍

要解决什么问题

在 TypeScript 里引入 fp-ts 时,常见困境是:教程堆满范畴论术语,团队读不懂;或者为了「函数式」把简单 null 检查改成嵌套 pipe,反而更难维护。本技能针对的是日常业务代码:可空值、预期内失败、异步链式调用,以及从命令式写法逐步重构,而不是把 FP 当成信仰。

技能如何组织内容

文档按 80/20 排列,优先讲五个高频模式:

  • pipe:对同一份数据连续做 3 次以上变换时,按阅读顺序链式调用,减少中间变量和深层嵌套。
  • Option:用 O.fromNullable、O.flatMap、O.getOrElse 处理缺失值,替代散落的 if (x !== null && x !== undefined)。
  • Either:用 E.right / E.left 把成功与失败显式化,配合 E.tryCatch、E.fold 替代「抛异常 + try/catch」处理预期内错误。
  • map / flatMap:在容器内变换或串联可能失败的下一步,而不反复手动解包。

此外给出可对照的重构示例(回调嵌套 → pipe、多处 null 检查 → Option 链、Promise + try/catch → TaskEither 思路),以及速查表把「大白话意图」映射到 fp-ts API。进阶章节单独列出 TaskEither、Validation、Reader 等,并明确建议先吃透基础再扩展。

适用边界

黄金法则是:若 FP 让代码更难读,就不要用。 简单 null 检查、简单循环、性能敏感路径、或团队尚不熟悉 FP 时,应保持命令式或直白写法。使用前自问:初级开发者能否读懂;若只有你能维护,则不算好代码。

使用场景

  • 接手遗留 TS 服务,多处 `if (x != null)` 与嵌套三元,需要改成 Option 链并保持行为不变
  • 编写解析/校验接口:失败是常态,希望用 Either 返回 typed error 而不是 throw 后在上层 catch
  • 同一条业务数据要经过过滤、映射、聚合等多步变换,中间临时变量过多,想用 pipe 按阅读顺序串起来
  • 把 Promise 链 + try/catch 的异步流程整理成可组合的 TaskEither,方便统一处理左值错误

适合人员

  • 刚引入 fp-ts 的前端/全栈工程师,需要跳过范畴论、直接对照 API 改业务代码
  • 负责支付或订单域 TypeScript 的同学,要把可空字段与业务错误从异常流里拆出来
  • 带 3~5 人 TS 小队的 Tech Lead,在代码评审里权衡「用 FP」与「团队能读懂」
  • 正在把命令式模块拆成纯函数的维护者,需要 pipe/Option/Either 的重构前后示例