我有一个复杂的界面。它的一个简单版本应该是这样的
Interface Person {
'name': string, 'address': string, 'age': number, 'height': number
}
const person:Person = {'name': 'Yair', 'address': 'here', 'age': 12, 'height': 186}
现在假设我想创建一个函数来动态地更新名字或地址,这个函数运行得很好:
let updateNameOrAddress = (key: "name"|"address", value: string): void => {
person[key] = value
}
然而,当我添加越来越多的字符串字段时,用这种方法定义键会变得很困难,所以我尝试这样做:
let updateNameOrAddress = (key: keyof Person, value: string): void => {
person[key] = value
}
好吧,这就产生了这个错误:类型'string'不能赋值给类型'never'我有理由相信这是因为name现在也可以是"age"或"height"。我坚持添加类型作为"name"的可能性--但是我的真实对象有很多值。有没有办法获取keyof,只检索string/numeric键?
先谢了
2条答案
按热度按时间7gs2gvoe1#
使用generics,您可以检查更改的键,并将其Map到
Person
,以通用方式检索属性的值类型。注意,
T
正在访问Person[T]
,这意味着value
参数的类型可以根据给定的key
参数来确定。Playground
iyr7buue2#
有没有办法获取keyof,只检索字符串/数字键?
TSPlayground