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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:25:16