You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

fp-ts中T[]经返回Option的映射转为Option<T[]>的高效实现方案

解决方案

你要实现的T[] -> Option<T[]>转换可以直接用fp-ts内置的Array.traverse方法完成,它天然合并了map和sequence两个步骤,且针对Option的Applicative实例具备短路特性:只要遇到第一个返回None的元素,就会直接终止后续所有元素的处理,完全符合你要的优化需求。

核心实现代码

import * as A from 'fp-ts/Array'
import * as O from 'fp-ts/Option'
import { pipe } from 'fp-ts/function'

// 转换逻辑,签名完全匹配你的需求:<T>(mapFn: (t: T) => O.Option<T>) => (arr: T[]) => O.Option<T[]>
const arrayTraverseMap = A.traverse(O.Applicative)

// 单独使用示例
const result = arrayTraverseMap(mapFn)(['foo', 'bar', 'baz'])

适配你原外层包裹Option的场景

可以直接把原来的两步合并成一步,代码更简洁:

pipe(
  O.some(['foo', 'bar', 'baz']), // O.Option<string[]>
  O.chain(A.traverse(O.Applicative)(mapFn)), // 直接得到 O.Option<string[]>
)

注意:你原示例中导入Option时用了别名E,但后续代码使用的是O,实际使用时统一别名即可。

内容的提问来源于stack exchange,提问作者james2mid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:36:04