단일 유형 제약 조건이있는이 예제와 같은 일반 인터페이스가 있습니다.
export interface IExample<T extends MyClass> {
getById(id: number): T;
}
하나가 아닌 여러 유형 제약 조건을 지정할 수 있습니까?
답변:
Typescript는 제네릭 유형에 대한 다중 상속을 얻는 구문을 제공하지 않습니다. 그러나 Union 유형 및 Intersection 유형을 사용하여 유사한 의미를 얻을 수 있습니다. 귀하의 경우에는 교차로를 원합니다.
interface Example<T extends MyClass & OtherClass> {}
두 유형의 Union의 경우 :
interface Example<T extends MyClass | OtherClass> {}
<T extends MyInterfaceA & MyInterfaceB>
유형이 두 인터페이스를 모두 구현해야합니다.
extends A|B
은 A OR B를 extends A & B
모두 확장하는 것입니다! 어쩌면 당신은 .... 당신의 대답에 모두 지정해야합니다
이에 대한 해결 방법은 수퍼 인터페이스를 사용하는 것입니다 ( "인터페이스가 클래스에서 상속하도록 허용하는 이유"라는 질문에도 답).
interface ISuperInterface extends MyClass, OtherClass {
}
export interface IExample<T extends ISuperInterface> {
getById(id: number): T;
}
클래스에서 파생 된 인터페이스에 대한 주석을 참조하십시오 ... 이름에 무엇이 있습니까?
0.9.0 사양의 섹션 3.5에서 이것을 찾았습니다.
인터페이스 선언은 명명 된 유형 만 도입하는 반면, 클래스 선언은 명명 된 유형의 구현 인스턴스를 만드는 명명 된 유형과 생성자 함수를 도입합니다. 클래스 및 인터페이스 선언에 의해 도입 된 명명 된 형식은 사소한 차이 만 있으며 (클래스는 선택적 멤버를 선언 할 수없고 인터페이스는 전용 멤버를 선언 할 수 없음) 대부분의 컨텍스트에서 상호 교환이 가능합니다. 특히 공용 멤버 만있는 클래스 선언은 인터페이스 선언으로 만든 것과 똑같은 기능을하는 명명 된 유형을 도입합니다.