1
는 내가있는 곳입니다. 나는 그것이해야한다고 생각하지 않는다 : 계약자는 As (그리고 더 적은) As를 취해야하고, 다른 것은 없어야한다.공변 자기 참조 유형
더 중요하게, 어떻게 합니까 나는 이것을합니까? 그 결과가 컴파일러에 의해 강제되는 As의 균질 한 트리가되기를 바란다.
는 내가있는 곳입니다. 나는 그것이해야한다고 생각하지 않는다 : 계약자는 As (그리고 더 적은) As를 취해야하고, 다른 것은 없어야한다.공변 자기 참조 유형
더 중요하게, 어떻게 합니까 나는 이것을합니까? 그 결과가 컴파일러에 의해 강제되는 As의 균질 한 트리가되기를 바란다.
TypeScript 유형 시스템은 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'.