2017-10-07 1 views
1

는 내가있는 곳입니다. 나는 그것이해야한다고 생각하지 않는다 : 계약자는 As (그리고 더 적은) As를 취해야하고, 다른 것은 없어야한다.공변 자기 참조 유형

더 중요하게, 어떻게 합니까 나는 이것을합니까? 그 결과가 컴파일러에 의해 강제되는 As의 균질 한 트리가되기를 바란다.

답변

3

TypeScript 유형 시스템은 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'.