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

TypeScript:如何在一次调用中同时传递和推断泛型类型参数

解决方案:通过柯里化实现部分泛型参数指定+自动推断

在TypeScript中,直接调用泛型函数时无法只指定部分泛型参数(其余参数自动推断),但可以通过**柯里化(Currying)**将函数拆分为两个阶段,实现先指定第一个泛型参数,再让编译器自动推断第二个参数的类型。

实现代码

function passAndInferType<S>() {
  // 返回的内层函数自动推断T的类型
  return <T>(arg1: S, arg2: T) => {
    return { arg1, arg2 };
  };
}

验证场景

  1. 完全自动推断两个参数类型
const test = passAndInferType()('hello', 'world'); 
// 类型自动推断为:{ arg1: string; arg2: string }
  1. 自动推断第二个参数的复杂类型
const test2 = passAndInferType()('hello', { foo: 'bar' }); 
// 类型自动推断为:{ arg1: string; arg2: { foo: string } }
  1. 指定第一个参数类型,第二个参数类型不匹配时报错(符合预期)
const test3 = passAndInferType<boolean>()(false, { foo: 'bar' }); 
// 报错:类型"{ foo: string; }"的参数不能赋给类型"string"的参数
  1. 指定第一个参数类型,自动推断第二个参数类型(满足需求)
const test4 = passAndInferType<boolean>()(false, { foo: 'bar' }); 
// 类型正确推断为:{ arg1: boolean; arg2: { foo: string } }

原理说明

将原函数拆分为两层:

  • 外层函数仅接收泛型参数S,用于显式指定第一个参数的类型;
  • 内层函数接收两个参数,其中arg1的类型由外层指定的S约束,arg2的类型T由编译器自动推断。

这种方式完美解决了“部分指定泛型参数,其余自动推断”的需求。

内容的提问来源于stack exchange,提问作者Michael.Lumley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:52:15