Program Tip

TypeScript 제네릭에 대해 여러 유형 제약 조건을 지정할 수 있습니까?

programtip 2020. 11. 21. 09:22
반응형

TypeScript 제네릭에 대해 여러 유형 제약 조건을 지정할 수 있습니까?


단일 유형 제약 조건이있는이 예제와 같은 일반 인터페이스가 있습니다.

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> {}

이에 대한 해결 방법은 수퍼 인터페이스를 사용하는 것입니다 ( "인터페이스가 클래스에서 상속하도록 허용하는 이유"라는 질문에도 답).

interface ISuperInterface extends MyClass, OtherClass {

}

export interface IExample<T extends ISuperInterface> {
    getById(id: number): T;
}

클래스에서 파생 된 인터페이스에 대한 주석을 참조하십시오. 이름은 무엇입니까?

0.9.0 사양의 섹션 3.5에서이를 찾았습니다.

인터페이스 선언은 명명 된 유형 만 도입하는 반면, 클래스 선언은 명명 된 유형의 구현 인스턴스를 만드는 명명 된 유형 및 생성자 함수를 도입합니다. 클래스 및 인터페이스 선언에 의해 도입 된 명명 된 유형은 사소한 차이 만 있으며 (클래스는 선택적 멤버를 선언 할 수없고 인터페이스는 개인 멤버를 선언 할 수 없음) 대부분의 컨텍스트에서 상호 교환이 가능합니다. 특히 공용 멤버 만있는 클래스 선언은 인터페이스 선언으로 만든 것과 똑같은 기능을하는 명명 된 유형을 도입합니다.

참고 URL : https://stackoverflow.com/questions/17125764/can-you-specify-multiple-type-constraints-for-typescript-generics

반응형