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

如何让函数对象参数的单个属性支持泛型?

TypeScript泛型函数参数合并为对象的正确写法

你需要把泛型T声明在函数本身的泛型参数列表里,而不是尝试从参数类型中解构。下面是两种正确的实现方式:

方式一:直接内联对象类型

直接在函数的泛型参数中定义T,然后在对象参数类型里使用它:

function test<T>(params: {a: string; b: T; c: number}) {
  // 函数逻辑
}

调用时TypeScript会自动推导T的类型:

test({a: "foo", b: 123, c: 456}); // T被推导为number
test({a: "bar", b: ["a", "b"], c: 789}); // T被推导为string[]

方式二:复用预定义的泛型对象类型

如果已经定义了MyObject<T>类型,只需在函数上声明泛型T,再把它传递给MyObject即可:

type MyObject<T> = {a: string; b: T; c: number};

function test<T>(params: MyObject<T>) {
  // 函数逻辑
}

这种写法和方式一功能完全相同,只是把对象类型抽成了可复用的别名,适合需要多次使用该类型的场景。

你之前尝试的function test<{_, T, __}>(params: MyObject<T>)是错误的语法——泛型参数列表里只能声明独立的类型参数(比如T),不能用对象解构的形式。TypeScript的泛型参数必须在函数名后的<>里显式声明,之后才能在参数类型、返回值或函数内部引用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:55:19