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
相关产品推荐
相关产品推荐

