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

TypeScript可选泛型类型无法推断的问题及解决方法咨询

解决TypeScript部分泛型指定、其余自动推断的问题

TypeScript本身不支持直接“部分显式指定泛型参数,剩余参数自动推断”的语法,但可以通过柯里化(Currying)拆分函数的方式实现这个需求。

柯里化改造方案

把原函数拆分为两层调用:第一层接收需要手动指定泛型的参数,第二层接收剩余参数让TypeScript自动推断对应的泛型。

改造后的代码示例:

// 拆分为两层函数,第一层指定Foo泛型,第二层自动推断Bar
function test<Foo = unknown>(foo: Foo) {
  return function<Bar = undefined>(bar: Bar) {
    return { foo, bar: [bar] };
  };
}

使用方式:

// 手动指定Foo为number,Bar自动从参数'bar'推断为string
const b = test<number>(10)('bar');
// 返回类型:{ foo: number; bar: string[] },符合预期

// 不指定任何泛型,全部自动推断
const a = test(10)('bar');
// 返回类型:{ foo: number; bar: string[] }

// 也可以手动指定两个泛型参数
const c = test<number>(10)<string>('bar');

原理说明

柯里化通过拆分函数调用,让第一层函数锁定需要手动指定的泛型类型,第二层函数则可以完全基于传入的参数自动推断剩余泛型,完美避开了TypeScript中“要么全显式指定泛型,要么全自动推断”的限制。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:25:27