gpt4 book ai didi

typescript - 类型化函数可以递归访问对象属性吗?

转载 作者:行者123 更新时间:2023-12-04 10:13:55 26 4
gpt4 key购买 nike

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");

但我正在寻找一种好方法来获取任意数量的 propsdeepProp功能根据需要潜入深度。我想该函数的签名将类似于 function deepProp(obj, ...props) { } .有没有好的方法可以做到这一点?谢谢!

最佳答案

不可能有任意数量的键,但您可以制作类似于 lodash's 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 :)

关于typescript - 类型化函数可以递归访问对象属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61172701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com