协变自引用类型

时间:2017-10-07 00:47:18

标签: typescript

我正在尝试制作一个正确的类型安全的二叉树,这就是我所在的地方:

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的同构树,由编译器强制执行。

1 个答案:

答案 0 :(得分:3)

TypeScript类型系统是structural。这意味着对于类型检查,您的frame.R = frame.R.astype(object) # assertion frame.R.values[frame.R.isnull()] = {} A类是相同的。如果你使它们不同,你会得到错误:

B