我正在尝试制作一个正确的类型安全的二叉树,这就是我所在的地方:
class BinaryNode<N extends BinaryNode<N>> {
constructor(left?: N, right?: N) {}
}
class A extends BinaryNode<A> { }
class B extends BinaryNode<B> { }
const leafA = new A();
const leafB = new B();
const rootA = new A(leafA, leafB);
问题是,这个编译。我认为不应该这样:承包商应该拿两个(或更少)As,而不是别的。
更重要的是,如何做我这样做了?我希望结果是As的同构树,由编译器强制执行。
答案 0 :(得分:3)
TypeScript类型系统是structural。这意味着对于类型检查,您的frame.R = frame.R.astype(object) # assertion
frame.R.values[frame.R.isnull()] = {}
和A
类是相同的。如果你使它们不同,你会得到错误:
B