使用fp-ts的TE.sequenceArray处理不同返回类型遇编译错误
解决fp-ts中TE.sequenceArray的类型不匹配问题
问题原因
TE.sequenceArray要求传入的数组元素必须是同类型的TaskEither,TypeScript数组的元素类型需要统一。你的代码中,getName()返回TaskEither<Error, String>,getAge()返回TaskEither<Error, number>,两者右值类型不同,TypeScript会尝试将数组推断为TaskEither<Error, String>[],因此getAge()的类型无法匹配,导致报错。
解决方案:使用TE.sequenceTuple
fp-ts提供了sequenceTuple函数,专门用于处理不同类型的TaskEither并行执行,它接受多个TaskEither参数并返回对应类型的元组结果,完美适配你的场景。
修改后的代码如下:
import * as TE from 'fp-ts/TaskEither'; import { pipe } from 'fp-ts/lib/function'; function getName(): TE.TaskEither<Error, string> { return TE.right('John Doe'); } function getAge(): TE.TaskEither<Error, number> { return TE.right(40); } export function seqArrayTest(): TE.TaskEither<Error, string> { return pipe( TE.sequenceTuple(getName(), getAge()), TE.chain(([name, age]) => { return TE.right(`Name: ${name}, Age: ${age}`); }), ); }
补充说明
TE.sequenceArray适用于批量处理同类型的TaskEither(比如多个返回string的异步操作);TE.sequenceTuple支持最多8个不同类型的TaskEither参数,返回的TaskEither右值是对应顺序的元组,解构时能保留各自的原始类型,无需额外类型断言。
内容的提问来源于stack exchange,提问作者Md. Sajedul Karim
相关产品推荐
相关产品推荐

