한 입 크기로 잘라먹는 타입스크립트 - 인터페이스 확장하기
1. 인터페이스의 확장
Animal 인터페이스의 서브 인터페이스 3가지를 생성하였다.
- chapter1.ts
/**
* 인터페이스의 확장
*/
interface Animal {
name: string;
age: number;
}
// sub1
interface Dog {
name: string;
age: number;
isBark: boolean;
}
// sub2
interface Cat {
name: string;
age: number;
isScratch: boolean;
}
// sub3
interface Chicken {
name: string;
age: number;
isFly: boolean;
}
name, age 프로퍼티가 4번이나 반복된다.
중복되는 프로퍼티를 지우고 extends 키워드를 사용하여 확장한다. 다른 말로 상속이라고도 불린다.
- chapter1.ts
/**
* 인터페이스의 확장
*/
interface Animal {
name: string;
color: string;
}
// sub1
interface Dog extends Animal {
isBark: boolean;
}
const dog: Dog = {
name: 'dog'
, color: 'blue'
, isBark: true
};
// sub2
interface Cat extends Animal {
isScratch: boolean;
}
// sub3
interface Chicken extends Animal {
isFly: boolean;
}
2. 부모와 동일한 프로퍼티의 타입 재정의
상속을 받는 인터페이스에서 부모와 동일한 프로퍼티의 타입을 다시 정의할 수 있다.
한 가지 규칙이 있다면, 다시 정의하려고 하는 타입은 부모가 가진 원본 타입의 서브 타입이어야 한다.
- chapter1.ts
/**
* 부모와 동일한 프로퍼티의 타입 재정의
*/
interface Animal {
name: string;
color: string;
}
// sub1
interface Dog extends Animal {
name: 'hello';
isBark: boolean;
}
const dog: Dog = {
// name: number // 서브타입이 아니기 때문에 오류
name: 'hello'
, color: 'blue'
, isBark: true
};
3. 타입 별칭 확장하기
인터페이스는 객체 타입이면 다 확장할 수 있다.
- chapter1.ts
/**
* 타입 별칭 확장하기
*/
type Animal = {
name: string;
color: string;
}
// sub1
interface Dog extends Animal {
isBark: boolean;
}
4. 다중 확장
인터페이스는 여러가지 인터페이스를 다중으로 확장이 가능하다.
- chapter1.ts
/**
* 타입 별칭 확장하기
*/
interface Animal {
name: string;
color: string;
}
// sub1
interface Dog extends Animal {
isBark: boolean;
}
// sub2
interface Cat extends Animal {
isScratch: boolean;
}
interface DogCat extends Dog, Cat {}
// Dog 타입과 Cat 타입이 가진 모든 프로퍼티들을 다 가짐
const dogCat: DogCat = {
name: 'dogcat'
, color: 'red'
, isBark: true
, isScratch: true
}
한 입 크기로 잘라먹는 타입스크립트(TypeScript) 강의 | 이정환 Winterlood - 인프런
이정환 Winterlood | 문법을 넘어 동작 원리와 개념 이해까지 배워도 배워도 헷갈리는 타입스크립트 이제 제대로 배워보세요! 여러분을 타입스크립트 마법사🧙🏻♀️로 만들어드립니다., 프론
www.inflearn.com
'강의 실습 > 한 입 크기로 잘라먹는 타입스크립트(TypeScript)' 카테고리의 다른 글
자바스크립트의 클래스 소개 (1) | 2024.11.17 |
---|---|
인터페이스 합치기 (1) | 2024.11.13 |
인터페이스 (1) | 2024.11.11 |
사용자 정의 타입 가드 (0) | 2024.11.04 |
함수 오버로딩 (0) | 2024.11.03 |
댓글