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

TypeScript中是否存在类似keyof的valueof?如何匹配键对应值类型?

解决TypeScript中根据对象键约束对应值类型的问题

这问题我太懂了!你需要用TypeScript的泛型结合keyof操作符来实现,刚好能完美满足你的需求——让onChange函数根据传入的键,自动校验对应值的类型是否和对象属性的类型匹配。

具体实现步骤:

首先,先明确你的JWT类型定义(如果你的实际类型不同,直接替换即可):

type JWT = {
  token: string;
  expire: Date;
  userId: number;
};

然后,修改你的onChange函数,用泛型来绑定键和对应值的类型:

function onChange<K extends keyof JWT>(key: K, value: JWT[K]) {
  // 这里写你的属性赋值逻辑,比如给目标对象的对应键赋值
  // 示例:myJwt[key] = value;
}

为什么这样能解决问题?

  • 泛型K extends keyof JWT限制了第一个参数key必须是JWT类型的合法属性名;
  • value: JWT[K]则让第二个参数的类型严格对应key所指向的JWT属性的类型。

这样一来:

  • 调用onChange('expire', 1337)会直接报错,因为1337是number类型,而JWT的expire属性是Date类型;
  • 调用onChange('expire', new Date())或者onChange('token', 'my-jwt-token')这类符合类型的操作则会被正常允许。

为什么之前的value: valueof JWT不行?

valueof JWT会把JWT所有属性的类型合并成一个联合类型(string | Date | number),这样不管你传哪个键,只要值属于这个联合类型就不会报错,没办法做到键与值的一对一类型约束,而泛型的方式刚好解决了这个精准匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:04:22