我正在尝试构建一个正确的类型
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);问题是,这是编译。我不认为它应该:A承包商应该采取两个(或更少)作为,没有其他。
更重要的是,我该怎么做?我希望结果是由编译器强制执行的As同构树。
发布于 2017-10-07 00:59:24
TypeScript型系统为构造性。这意味着,对于打字,您的A和B类是相同的。如果您使它们不同,您将得到错误:
class BinaryNode<N extends BinaryNode<N>> {
constructor(left?: N, right?: N) {}
}
class A extends BinaryNode<A> { a: string }
class B extends BinaryNode<B> { b: string }
const leafA = new A();
const leafB = new B();
const rootA = new A(leafA, leafB); // Argument of type 'B' is not
// assignable to parameter of type 'A'.
// Property 'a' is missing in type 'B'.https://stackoverflow.com/questions/46615635
复制相似问题