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

TypeScript缺失高阶类型导致ts(2345)错误的可行workaround有哪些?

可行的解决方案

方案1:手动指定泛型参数

这是成本最低的临时解决方案,既然TS无法自动推断泛型identity的参数类型,直接显式声明即可:

const fi1 = F<number, number>(identity).compose(F2);
// 此时fi1的类型正确推导为 F<number, string>

方案2:扩展compose方法的类型兼容逻辑

修改F类型的compose签名,使其支持接收已经被F包装过的函数作为参数,自动适配类型:

type UnpackF<T> = T extends F<infer I, infer O> ? [I, O] : T extends (a: infer I) => infer O ? [I, O] : never;

type F<T, U> = {
  (a: T): U;
  "compose": <G extends (b: U) => any>(g: G) => F<T, ReturnType<G>>;
};

调整后只要入参函数的输入类型匹配U就能通过校验,不用区分是原生函数还是F包装后的函数。

方案3:调整调用顺序避开泛型前置

如果业务逻辑允许调整组合顺序,尽量把带明确输入输出类型的函数放在链式调用的头部,泛型函数放在后续的compose参数中,就能触发TS的自动类型推断:

// 原逻辑是identity -> f2,调整为直接用f2的包装实例调用compose传入identity,效果完全一致
const fi1 = F2.compose(identity);
// 自动推导类型为 F<number, string>,无报错

注意:如果函数组合的顺序不可调换,优先选择方案1或方案2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:18:01