better-result

TypeScript轻量级Result类型库,支持生成器组合

安装使用

复制下面这段提示词发给你的 AI(Claude / Cursor / TRAE / Codex / WorkBuddy 等),它会自动帮你完成安装:

帮我安装这个 AI Skill:better-result。
它的用途是:TypeScript轻量级Result类型库,支持生成器组合
完整的 Skill 内容见:https://321skill.com/skills/better-result/raw/index.md
请读取该页面内容,如果是 SKILL.md 格式直接安装,如果是 README 提炼核心 prompt 后安装。

提示词包含完整的 Skill 内容链接,AI 读取后即可完成安装。你也可以 查看完整内容 确认无误。

使用示例

‘帮我把这个调用外部API并解析JSON的代码,用 better-result 重写得更健壮。’ 它会分析你的异步函数,用 `Result.tryPromise` 包裹 fetch 调用,用 `andThen` 或生成器组合处理 JSON 解析,并为你添加完整的错误类型定义和恢复逻辑。

介绍

better-result 是一个专为 TypeScript 设计的轻量级 Result(结果)类型库。它解决了在 TypeScript 中处理可能成功或失败的操作时,缺乏统一、类型安全的错误处理模式的问题。传统的 try-catch 会破坏类型流,而 better-result 通过 Ok 和 Err 两种变体,将成功值与错误值都纳入类型系统,强制开发者显式处理所有可能的分支,从而编写出更健壮、可预测的代码。

使用方式非常直观。你可以通过 Result.ok(value) 创建成功结果,通过 Result.err(error) 创建错误结果。对于可能抛出异常的函数,可以使用 Result.try() 安全地包裹它。库提供了丰富的组合子(如 map, andThen, tryRecover)来转换、链式调用和恢复结果,并支持使用生成器(Generator)进行声明式的、类似同步代码的错误处理流程组合,极大地提升了异步或复杂逻辑的可读性。

这个库非常适合所有使用 TypeScript 进行后端服务、前端应用或全栈开发的工程师,尤其是那些追求代码健壮性、希望减少运行时错误、并青睐函数式编程风格的开发者。对于已经在使用类似 fp-tsoxide.ts 等库的团队,better-result 提供了一个更轻量、更专注于 Result 模式且集成生成器组合的替代选择。

fp-tsEither 类型相比,better-result 的 API 设计更贴近 JavaScript/TypeScript 开发者的习惯,学习曲线更平缓。与 oxide.ts 等新兴 Result 库相比,其最大的特色在于内置了对生成器(Generator)组合的原生支持,允许开发者以更直观、线性的方式编写复杂的、依赖前序结果的业务逻辑链,这是其区别于同类工具的核心优势。

核心特点

核心区别在于原生支持生成器(Generator)进行结果组合,允许以类似同步代码的线性方式编写复杂的、依赖前序结果的异步或错误处理逻辑链,这在同类 Result 库中较为独特。

注意事项

不适合追求极简依赖或仅需最基本 Result 封装(如仅需 ok/err 判断)的超轻量级场景。

常见问题

better-result 和 try-catch 有什么区别?

better-result 将成功和错误都编码进类型系统,强制显式处理,避免错误被意外忽略;try-catch 是命令式的,错误处理流程容易遗漏且破坏类型流。

生成器组合具体怎么用?

使用 `Result.do` 生成器函数,内部用 `yield*` 解包前序 Result 值,可以像写同步代码一样链式调用多个可能失败的操作,自动组合错误。

给 AI 助手的安装指引

如果你的 AI 编程助手(Claude Code、Cursor、TRAE 等)能看到这个页面,把下面这段发给它即可自动完成安装:

请访问 https://321skill.com/skills/better-result/raw/index.md 读取 better-result 的原始 Skill 定义(Markdown 格式),按其中说明在我的环境里完成安装和配置。