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

如何基于函数参数自定义类型,使返回对象拥有确定键类型?

让TypeScript动态创建的对象推导具体键类型

要让createTypedObject返回带有具体键名的类型(比如{test: number}),核心是让TypeScript捕获传入的name参数的具体字符串字面量类型,而不是宽泛的string类型。可以通过泛型实现:

方案一:泛型接口+映射类型

interface Params<K extends string> {
  name: K
}

const createTypedObject = <K extends string>(params: Params<K>) => ({
  [params.name]: 1,
}) as { [Key in K]: number }

方案二:简化的泛型参数写法

如果不需要单独定义Params接口,可以直接给函数参数指定泛型:

const createTypedObject = <K extends string>(params: { name: K }) => ({
  [params.name]: 1,
}) as { [Key in K]: number }

效果验证

调用函数时,TypeScript会自动推导传入的name的具体值作为键类型:

const obj = createTypedObject({ name: 'test' })
// obj 的类型现在是 { test: number }

原理说明

原来的代码中,Params的name类型是string,TypeScript会把动态生成的键推断为字符串索引签名{[p: string]: number}。通过泛型K extends string,我们让TypeScript保留传入的具体字符串字面量信息,再通过映射类型{ [Key in K]: number }明确返回对象的键就是该字面量,值为number类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:30:55