2017-10-07 17 views
1

は私がどこです。私はそれがすべきだとは思わない:契約者は、2つ(またはそれ以下)のAsを取るべきであり、他には何もしてはならない。共変自己参照型の

さらに重要なことは、どのようにするのですか?私はこれをしますか?結果は、コンパイラによって強制されるAsの均質ツリーにしたい。

答えて

3

タイプスクリプト型システムはstructuralです。つまり、型検査の場合、ABのクラスは同じです。それらを異ならせると、エラーが発生します:

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'.