[typescript] 제네릭 제약 조건을 사용하여 특정 타입에만 제네릭을 적용하는 방법
TypeScript에서 제네릭을 사용할 때, 특정 타입에만 제네릭을 제약하는 것이 유용한 경우가 있습니다. 이를 위해 제네릭 제약 조건을 사용할 수 있습니다. 제네릭 제약을 사용하면, 특정 타입에 해당하는 메서드나 속성을 사용할 수 있으며, 다른 타입에서는 제네릭이 적용되지 않도록 할 수 있습니다.
다음은 TypeScript에서 제네릭 제약을 사용하여 특정 타입에만 제네릭을 적용하는 방법에 대한 예제 코드입니다.
// 인터페이스에 extends 키워드를 사용하여 제네릭 제약을 추가
interface Printable {
print(): void;
}
// Printer 클래스에 제네릭 T를 사용하고, 제네릭 제약으로 Printable을 지정
class Printer<T extends Printable> {
constructor(private value: T) {}
// 제네릭으로 지정된 타입에 속하는 print 메서드를 호출
printValue(): void {
this.value.print();
}
}
// 제네릭으로 지정된 타입이 Printable을 구현해야 함
class Document implements Printable {
print(): void {
console.log("Document is printed");
}
}
// 제네릭으로 지정된 타입이 Printable을 구현하지 않았으므로 에러 발생
class Car {
drive(): void {
console.log("Car is being driven");
}
}
const documentPrinter = new Printer(new Document());
documentPrinter.printValue(); // Output: Document is printed
// 아래 코드는 에러가 발생합니다. Car 클래스는 Printable을 구현하지 않았기 때문에 제네릭 제약에 위배됩니다.
// const carPrinter = new Printer(new Car());
위 예제에서는 Printer
클래스에 제네릭 T
를 사용하고, 제네릭 제약으로 Printable
인터페이스를 지정했습니다. 이를 통해 printValue
메서드에서는 제네릭으로 지정된 타입이 Printable
인터페이스를 구현한 경우에만 print
메서드를 호출할 수 있습니다.
제네릭을 사용하여 코드를 보다 유연하게 작성하고, 타입 안정성을 확보하는 데 제네릭 제약이 유용하게 활용될 수 있습니다.
더 많은 정보는 TypeScript 공식 문서를 참고할 수 있습니다.