让我们有一个非常简单的节点/对象树,其中包含父节点和子节点引用,我们需要在其中引用父节点和子节点。这里棘手的部分是我们不仅要在树中设计和使用节点,还要独立于树/单独设计和使用节点。意思是,我们不能直接将它们嵌套到父节点中,而是通过引用在父节点中引用子节点。这提出了 Typescript 错误的问题:
2448 block 作用域变量“rootNode”在其声明之前使用。ts(2448)
如果我们按降序排列节点,我们可以引用上面的子节点。但不是下面的 parent 。反之亦然。如果我们将 parent 放在 child 之上,我们就不能引用 child ,因为他们是在他们之后声明的。
似乎 Typescript 不够复杂,无法预编译声明并会抛出错误。
如何解决?
这里是树节点的示例(按降序排列)及其带有引用的“独立”节点:
export interface Node {
id: string,
value?: string,
parent?: Node,
children?: Node[]
}
export const nodeB2: Node = {
id: 'B2',
value: 'bbb-2',
parent: nodeA1 // ERR 2448
}
export const nodeB1: Node = {
id: 'B1',
value: 'bbb-1',
parent: nodeA1 // ERR 2448
}
export const nodeA1: Node = {
id: 'A1',
value: 'aaa-1',
parent: rootNode, // ERR 2448
children: [nodeB1, nodeB2]
}
export const rootNode: Node = {
id: 'ROOT',
value: 'root',
children: [nodeA1]
}
最佳答案
试一试:
declare let rootNode: Node;
export interface Node {
id: string,
value ? : string,
parent ? : Node,
children ? : Node[]
}
export const nodeB2: Node = {
id: 'B2',
value: 'bbb-2',
parent: rootNode // ERR 2448
}
export const nodeB1: Node = {
id: 'B1',
value: 'bbb-1',
parent: rootNode // ERR 2448
}
export const nodeA1: Node = {
id: 'A1',
value: 'aaa-1',
parent: rootNode, // ERR 2448
children: [nodeB1, nodeB2]
}
rootNode = {
id: 'ROOT',
value: 'root',
children: [nodeA1]
};
export default rootNode;
关于具有子/父引用的 Angular/typescript 树 - 如何避免在声明之前使用 Block-scoped 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59350139/