Appearance
如何快速选择和使用 fp-ts 的函数式类型
解决在 TypeScript 中使用 fp-ts 库时面对众多抽象类型(如 Option, Either, TaskEither)难以快速抉择的问题,提供一套标准的决策矩阵和代码模版。
为什么需要这个技能
对于习惯于命令式编程的开发者来说,fp-ts 提供的函数式抽象(Algebraic Data Types)学习曲线较为陡峭。在实际开发中,经常会出现“这里应该用 Either 还是 Option?”或者“异步错误处理该选哪个类型?”的困惑。
本技能通过一套简单的决策逻辑,将复杂的类型选择简化为几个关键问题,并提供标准化的导入方式和单行代码模式,避免开发者在查阅海量文档时浪费时间。
适用场景
- 在 TypeScript 项目中引入 fp-ts,需要决定具体使用哪个类型来处理空值或错误。
- 需要快速查找 fp-ts 的核心模块导入路径(如
fp-ts/Option)。 - 编写函数式流水线(pipe)时,需要快速匹配对应的操作符(如
map,flatMap,match)。 - 将传统的
try-catch或if (null)逻辑重构为更具类型安全的函数式风格。
核心工作流
1. 类型选择决策树
通过以下逻辑快速确定所需的类型:
- 操作是否异步?
- 否 是否涉及错误?
- 是
Either<Error, Value> - 否 是否可能缺失值?
- 是
Option<Value> - 否 直接使用原值
- 是
- 是
- 是 是否涉及错误?
- 是
TaskEither<Error, Value> - 否 是否可能缺失值?
- 是
TaskOption<Value> - 否
Task<Value>
- 是
- 是
- 否 是否涉及错误?
2. 标准导入实践
遵循社区约定使用短别名,增加代码可读性:
typescript
// 核心函数
import { pipe, flow } from 'fp-ts/function'
// 核心类型模块
import * as O from 'fp-ts/Option' // 处理可能缺失的值
import * as E from 'fp-ts/Either' // 处理成功或失败
import * as TE from 'fp-ts/TaskEither' // 异步 + 失败处理
import * as T from 'fp-ts/Task' // 纯异步处理
import * as A from 'fp-ts/Array' // 数组增强工具3. 快速模式应用
- 处理 Nullable:
O.fromNullable(value) - 设置默认值:
O.getOrElse(() => default) - 包装 Try/Catch:
E.tryCatch(() => risky(), toError) - 执行流水线:
pipe(value, fn1, fn2, fn3)
下载和安装
解压后将目录放入你的 AI 工具 skills 文件夹,重启工具后即可使用。具体路径参考内附的 USAGE.zh.md。
你可能还需要
暂无推荐