我想创建两个类Parent
和Child
,每个类都包含对另一个类型的实例的引用。在许多编译语言中,这是完全合法的。例如,在C#中,这会编译:
public class Parent {
public Child myChild;
public Parent() {
myChild = new Child();
myChild.myParent = this;
}
}
public class Child {
public Parent myParent;
}
但是,在TypeScript中,我无法使用它。我找到的最佳选择是创建any
类型的引用之一,但这会使Child
在处理Parent
或其他任何其他内容时需要执行的任何静态类型检查失败成员。
class Parent {
myChild: Child;
constructor() {
this.myChild = new Child();
this.myChild.myParent = this;
}
}
class Child {
myParent: any;
}
在一个理想的世界中,所有对象模型都可以通过非循环图来轻松描述,但现实世界是混乱的,有时候能够以两种方式导航对象图是非常方便的。
我可以在TypeScript中获得这样的双向静态类型对象图导航吗?怎么样?
答案 0 :(得分:0)
如果两个类都在同一个文件(模块)中 - 你应该没有问题。例如,以下代码可以正常工作:
class Parent
{
public myChild: Child;
public constructor()
{
this.myChild = new Child();
this.myChild.myParent = this;
}
public callMe()
{
this.myChild.callMe();
}
public callMeAgain()
{
console.log("Parent");
}
}
class Child
{
public myParent: Parent;
public callMe()
{
console.log("Child");
this.myParent.callMeAgain();
}
}
let p = new Parent();
p.callMe();
更新。
不幸的是,即使使用最新的打字稿2.0.3,模块之间的交叉引用也不适用于一般情况。更复杂的交叉引用案例(将其作为example)仍然无效。由于您可以参考上一个链接和answer
的原因答案 1 :(得分:0)
此代码使用TypeScript 2.0.2
正确构建:
class Parent {
myChild: Child;
constructor() {
this.myChild = new Child();
this.myChild.myParent = this;
}
}
class Child {
myParent: Parent;
}