我有一个类似JSON的大型对象,它有很多嵌套,但最终变成了。我希望能够创建一个类型安全的函数,用于从嵌套结构中提取任何任意字符串或对象。
例如,这里有一个类似于我的结构:
const obj = {
"keyA": {
"nestedA1": "string",
"nestedA2": "string"
},
"keyB": {
"nestedB1" : {
"doubleNested1": "string",
"doubleNested2": "string"
}
}
}
我编写了以下函数,它在最终嵌套级别工作,以从对象中获得类型安全的字符串:
const getConfig = <T extends string>(collection: Record<T, string>, key: T): string => {
return collection[key];
}
这适用于以下用例,按照我希望的方式。
getConfig(obj.keyA, "nestedA1") // compiles
getConfig(obj.keyB.nestedB1, "doubleNested") // compiles
getConfig(obj.keyA, "somethingRandom") // compile error
然而,我真的希望能够从结构中不仅选择字符串,还选择强类型对象。例如,我希望能够做到以下几点:
getConfig(obj.keyB, "nestedB1").doubleNested1
getConfig(obj, "keyA").nestedA1
我想修改函数的类型签名,以表明它可以返回正确类型的字符串或对象,AND,这样我就可以继续深入到返回的对象中。我该怎么做?尤其是当类型不是
Record<T,R>
例如,因为不是每个
R
对象中的值具有相同的类型(即,
keyA
和
keyB
没有相同类型的签名)
非常感谢。