타입스크립트에서의 extends 사용 예시를 정리해보려고 한다. 타입스크립트에서 extends는 주로 두 가지 용도로 사용된다.
extends는 클래스 상속을 정의할 때 사용된다. 자식 클래스가 부모 클래스를 확장하여 부모 클래스의 속성 및 메서드를 상속받는 방식이다.
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a sound.`);
}
}
class Dog extends Animal {
breed: string;
constructor(name: string, breed: string) {
super(name); // 부모 클래스의 생성자를 호출
this.breed = breed;
}
// 메서드 오버라이딩
speak() {
console.log(`${this.name} barks.`);
}
}
const dog = new Dog('Buddy', 'Golden Retriever');
dog.speak(); // "Buddy barks."
extends는 제네릭 타입 매개변수에 제약을 줄 때도 사용된다. 제네릭을 사용할 때, 특정 타입이 특정 조건을 만족하도록 강제할 수 있다.
function printLength<T extends { length: number }>(item: T): void {
console.log(item.length);
}
printLength('Hello'); // 5
printLength([1, 2, 3]); // 3
// printLength(123); // 'length' 속성이 없으므로 오류
T extends { length: number }를 통해 T타입이 length 속성을 가지고 있어야 한다는 제약조건을 설정한다. 그렇기 때문에, string이나 array같은 length 속성을 가진 타입만 허용되며, 숫자처럼 length 속성이 없는 타입은 오류가 발생한다.
마지막으로 extends는 인터페이스를 확장할 때도 사용된다.
interface Person {
name: string;
age: number;
}
interface Employee extends Person {
employeeId: string;
}
const employee: Employee = {
name: '이유림',
age: 26,
employeeId: '123'
};