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

TypeScript如何实现约束对象键名与对应值为相同字符串类型?

解决方案

可以实现,不需要提前枚举所有可能的键名,通过泛型约束就能达到要求。

实现代码

// 核心约束类型:要求对象的每个属性值等于对应的属性名
type KeyValueSame<T> = {
  [K in keyof T]: K
}

// 辅助推导函数,无需手动声明泛型参数,TS会自动推导传入对象的类型
const defineKeyValueSame = <T extends KeyValueSame<T>>(obj: T) => obj

效果验证

// 合法示例,无类型报错
const valid1 = defineKeyValueSame({ foo: "foo" })
const valid2 = defineKeyValueSame({ bar: "bar" })
// 支持任意自定义键
const valid3 = defineKeyValueSame({ a: "a", b: "b", test: "test" })

// 非法示例,TS直接抛出错误
// 错误提示:不能将类型“"bar"”分配给类型“"foo"”
const invalid = defineKeyValueSame({ foo: "bar" })

补充说明

如果是需要对函数参数做这类约束,可以直接把泛型写在函数定义里,不需要额外的辅助函数:

function processDict<T extends KeyValueSame<T>>(dict: T) {
  // 函数内部逻辑
}

// 调用时自动校验参数合法性
processDict({ x: "x" }) // 合法
processDict({ x: "y" }) // 报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:39:02