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

TypeScript如何通过泛型动态设置对象键合并相似类型

正确实现代码

你可以通过交叉类型 + 映射类型/Record工具类型实现需求,代码如下:

// 通用版本,支持传入任意字符串作为键名
type Timestamps<T extends string> = {
  timestamps: { start: number; end: number };
} & Record<T, string>;

如果需要严格限制只能传入word或sentence两个可选值,可以收紧泛型约束:

// 严格版本,仅允许使用预设的两个键名
type Timestamps<T extends 'word' | 'sentence'> = {
  timestamps: { start: number; end: number };
} & Record<T, string>;

使用效果完全符合要求:

  • Timestamps<'word'> 等价于原WordTimestamps类型
  • Timestamps<'sentence'> 等价于原SentenceTimestamps类型

原代码错误原因

你原本的写法里[key: T]: string是索引签名语法,索引签名仅支持string/number/symbol这类全局类型,不支持直接传入泛型参数作为键的类型,所以无法生效。而Record<T, string>本质是{ [K in T]: string }的语法糖,属于映射类型,可以动态根据泛型参数生成对应的键值对类型,再和固定的timestamps属性做交叉,就能得到需要的组合类型。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:45:08