【发布时间】:2018-08-30 14:32:02
【问题描述】:
Typescript 是 JavaScript 的 TYPED 超集,可以编译成 JavaScript,很好! 它可以帮助我们减少一些错别字等,好的! 我想创建一个接口,该接口将用作方法中的参数。这个接口必须代表一个用于解析对象的树视图。
例子:w1[a2].x[b02].y.z是myObject中z值的访问路径
const path = "w1[a2].x[b02].y.z";
const treeOfIdentifiers = {
"w1": {
key: "idLvlW",
"x": {
key: "idLvlX"
}
}
}
const myObject = {
w0: "Hello Root",
w1: [{
idLvlW: "a1",
x: [{
idLvlX: "b01",
y: {
z: "hello world from w1[a1].x[b01].y.z"
}
},
{
idLvlX: "b02",
y: {
z: "hello world from w1[a1].x[b02].y.z"
}
},
{
idLvlX: "b03",
y: {
z: "hello world from w1[a1].x[b03].y.z"
}
},
{
idLvlX: "b04",
y: {
z: "hello world from w1[a1].x[b04].y.z"
}
}
]
},
{
idLvlW: "a2",
x: [{
idLvlX: "b01",
y: {
z: "hello world from w1[a2].x[b01].y.z"
}
},
{
idLvlX: "b02",
y: {
z: "hello world from w1[a2].x[b02].y.z"
}
},
{
idLvlX: "b03",
y: {
z: "hello world from w1[a2].x[b03].y.z"
}
},
{
idLvlX: "b04",
y: {
z: "hello world from w1[a2].x[b04].y.z"
}
}
]
},
{
idLvlW: "a3",
x: [{
idLvlX: "b01",
y: {
z: "hello world from w1[a3].x[b01].y.z"
}
},
{
idLvlX: "b02",
y: {
z: "hello world from w1[a3].x[b02].y.z"
}
},
{
idLvlX: "b03",
y: {
z: "hello world from w1[a3].x[b03].y.z"
}
},
{
idLvlX: "b04",
y: {
z: "hello world from w1[a3].x[b04].y.z"
}
}
]
}
]
如果我使用 TypeScript 编码,treeOfIdentifiers 的类型|接口(如果不是 any!)会是什么? 事情是要确保 treeOfIdentifiers 的每个节点,将提供key 属性,我们不知道treeOfIdentifiers 的结构,因为我们不知道要解析的对象的结构!
【问题讨论】:
-
所以你有一个带有键和一些值的节点。这个值可以是另一个节点还是某个字符串?对吗?
-
我的意思是这个值可以是一个节点数组或一些字符串?
-
@FortyTwo 键是我们可以得到的确切属性,而其他键是与要解析的对象中的数组属性一样多的节点。
-
如果我对您的理解正确,那么像
INode { id: string; data: INode[] | IData[]; }和IData { data: string; }这样的东西应该可以工作 -
treeOfIdentifiers的每个节点是否总是恰好有两个属性,一个是具有string值的key,另一个是值是另一个节点的其他字符串键?还是我错过了什么?
标签: typescript