Skip to content

如何快速选择和使用 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-catchif (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. 快速模式应用

  • 处理 NullableO.fromNullable(value)
  • 设置默认值O.getOrElse(() => default)
  • 包装 Try/CatchE.tryCatch(() => risky(), toError)
  • 执行流水线pipe(value, fn1, fn2, fn3)

下载和安装

下载 fp-types-ref 中文版 Skill ZIP

解压后将目录放入你的 AI 工具 skills 文件夹,重启工具后即可使用。具体路径参考内附的 USAGE.zh.md

你可能还需要

暂无推荐