1
は私がどこです。私はそれがすべきだとは思わない:契約者は、2つ(またはそれ以下)のAsを取るべきであり、他には何もしてはならない。共変自己参照型の
さらに重要なことは、どのようにするのですか?私はこれをしますか?結果は、コンパイラによって強制されるAsの均質ツリーにしたい。
は私がどこです。私はそれがすべきだとは思わない:契約者は、2つ(またはそれ以下)のAsを取るべきであり、他には何もしてはならない。共変自己参照型の
さらに重要なことは、どのようにするのですか?私はこれをしますか?結果は、コンパイラによって強制されるAsの均質ツリーにしたい。
タイプスクリプト型システムはstructuralです。つまり、型検査の場合、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'.