클래스 상속
- 타입스크립트의 상속도 일반 자바스크립트 클래스 상속과 동일하다.
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
hello() {
return `안녕하세요. ${this.name}`;
}
}
class Developer extends Person {
language: string;
constructor(name: string, language: string) {
super(name);
this.language = language;
}
develop() {
return `${this.name} (이)가 개발을 시작하였습니다. 언어는 ${this.language} 입니다.`;
}
}
부모 인스턴스와 자식 인스턴스 할당하기
- 자식 타입의 변수에 부모 타입 할당 불가능
- 덜 구체적인 타입 (부모) 가 정보 없이 더 구체적인 타입 (자식) 이 되는 것은 불가능
- 부모 타입의 변수에 자식 타입 할당 가능
- 더 구체적인 타입 (자식) 이 덜 구체적인 타입 (부모) 가 되는 것은 가능
- 여기까지는 거의 다른 OOP 언어와 동일하다.
let parent1: Person = new Person("Jake");
let child1: Developer = new Developer("Jake Seo", "java");
let parent2: Person = new Person("Jake");
let child2: Developer = new Developer("Jake Seo", "java");
// 자식 타입의 변수에 부모 타입 할당 불가능
// 덜 구체적인 타입 (부모) 가 정보 없이 더 구체적인 타입 (자식) 이 되는 것은 불가능
child1 = parent1; // ERROR
// 부모 타입의 변수에 자식 타입 할당 가능
// 더 구체적인 타입 (자식) 이 덜 구체적인 타입 (부모) 가 되는 것은 가능
parent2 = child2; // 정상
타입스크립트 상속 할당이 조금 다른 점: 타입스크립트에서는 시그니처만 본다.
- 이번엔 자식 부모 양쪽으로 할당이 가능하다.
- 왜냐면, 타입스크립트는 오직 타입만 보기 때문에 시그니처가 같으면 같은 타입이다.
- age 가 옵셔널이기 때문에 구조가 같아지는 것이 가능
- 보통 다른 언어에서는 이러한 기능을 지원하지 않는다.
class Parent {
name: string;
constructor(name: string) {
this.name = name;
}
}
class Child extends Parent {
age?: number;
constructor(name: string, age: number) {
super(name);
this.age = age;
}
}
let parent3: Parent = new Parent("Jake");
let child3: Child = new Child("Jake", 10);
parent3 = child3; // 정상
child3 = parent3; // 정상
반응형
'Typescript' 카테고리의 다른 글
TS031. 타입스크립트의 Abstract Class (0) | 2024.01.01 |
---|---|
TS030. 타입스크립트 클래스에서 메서드, 속성 오버라이딩 (0) | 2024.01.01 |
TS028. 타입스크립트 인터페이스를 클래스에 사용하기 (0) | 2023.12.31 |
TS027. 타입스크립트에서의 클래스 선언 방식 (0) | 2023.12.31 |
TS026. 타입스크립트 오브젝트의 Key-Value Mapping 알아보기 (0) | 2023.12.31 |