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

TypeScript将三元泛型函数改写为柯里化版本时的类型报错问题

问题根源

TypeScript的泛型参数推导是跟随函数调用时机逐次完成的,你当前的写法将<I, O, E>三个泛型全部声明在最外层函数上,当你执行第一步调用curriedFunc(e => Error(${e}))时,TypeScript就需要确定所有泛型的具体类型。但第一个入参eFn的类型仅和泛型E相关,完全没有提供I、O的推导依据,TypeScript会默认将I、O推导为unknown类型,后续传入searchById时自然会出现类型不匹配的报错。

解决方案

将泛型参数拆分到实际使用该泛型的函数层即可:E由第一层入参使用,声明在最外层函数;I、O由第二层入参lp使用,声明在第二层函数。
正确代码如下:

import * as TE from 'fp-ts/TaskEither';

const curriedFunc = <E>(eFn: (e: unknown) => E) =>
  <I, O>(lp: (id1: I) => Promise<O | null>) =>
  (id2: I) =>
    TE.tryCatch(() => lp(id2), eFn)

修改后你原有的调用逻辑可以正常通过TypeScript类型校验,泛型会按照预期自动推导:E推导为Error,I推导为string,O推导为User。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:36:03