我正在用Typescript做BinaryTree的东西,所以我有类似下面的内容:
class BinaryTreeNode {
left: BinaryTreeNode;
right: BinaryTreeNode;
parent: BinaryTreeNode;
}
class BinarySearchNode extends BinaryTreeNode {
left: BinarySearchNode; //I have to rewrite those property types
}
那么是否可以将实例的属性类型引用到实例的构造函数?
根据您的实际代码,您可能正在寻找多态this
类型this
,即使在子类中,该类型也将存在于类的实际实例中:
class BinaryTreeNode {
left: this;
right: this;
parent: this;
}
(另外:请注意,如果使用--strict
编译器选项,则上述内容以及您的原始示例代码都将出现编译器错误。您没有初始化类属性,因此在运行时,我希望某些错误解除引用undefined
。根树节点可能没有父母,叶子也没有孩子,所以也许您希望道具是可选的。但这超出了问题的范围。)
然后,您的子类不需要任何特殊处理即可表现出您想要的方式:
class BinarySearchNode extends BinaryTreeNode {
someProp = "okay"; // stucturally identical classes are indistinguishable
}
(此外:我在子类中添加了一个属性,以使其与父类在结构上有所区别。TypeScript的类型系统是结构性的,而不是名义上的。具有相同结构但名称不同的两个类型实际上是同一类型。这可能导致令人惊讶的结果,即使在示例代码,最好避免使用任何空的类定义。)
让我们测试一下:
const btn = new BinaryTreeNode().left;
// const btn: BinaryTreeNode
const bsn = new BinarySearchNode().left;
// const bsn: BinarySearchNode
你可以看到,类型btn
和bsn
有自动BinaryTreeNode
和BinarySearchNode
分别。
希望能有所帮助;祝好运!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句