在typescript中有没有一种好的方法可以键入一个递归访问对象属性的函数?下面是一个深入两个层次的手工编码示例:
function deepProp<T, K extends keyof T>(obj: T, prop1: K, prop2: keyof T[K]) {
return obj[prop1][prop2];
}
// Example use
const obj = {
user: {
pets: [{
toys: [{
name: "Toughy",
price: 1999
}]
}]
}
} as const
deepProp(obj, "user", "pets");
但我正在寻找一种很好的方法,可以在deepProp
函数中取任意数量的props
,以便根据需要深入挖掘。我想这个函数的签名应该是function deepProp(obj, ...props) { }
。有什么好方法可以做到这一点吗?谢谢
不可能有任意数量的键,但您可以根据需要制作类似于lodash的get
的东西。
也可以以一种递归方式使用函数。
上述_.get
的示例(其类型最多支持4个密钥(:
const obj = {
user: {
pets: [{
toys: [{
name: "Toughy",
price: 1999
}]
}]
}
} as const
const toy1 = _.get(obj, ["user", "pets", 0, "toys"]); // correct type
const toy2 = _.get(obj, ["user", "pets", 0, "toys", 0]); // any :(
const toy3 = _.get(_.get(obj, ["user", "pets", 0, "toys"]), [0]); // correct type :)