Post

타입스크립트 - 타입 상속

Interface에서의 상속

extends를 사용하면 상속 받아서 사용할 수 있다.

1
2
3
4
5
6
7
8
9
interface Animal {
  name: string;
}
interface Dog extends Animal {
  bark(): void;
}
interface Cat extends Animal {
  meow(): void;
}

타입별칭에서의 상속

&를 사용하면 상속 받아서 사용할 수 있다.

1
2
3
4
5
6
7
8
9
type Animal = {
  name: string;
};
type Dog = Animal & {
  bark(): void;
};
type Cat = Animal & {
  meow(): void;
};

타입별칭을 interface가 상속받을 수 있고, interface가 타입별칭을 상속받을 수 있음

1
2
3
4
5
6
7
8
9
type Animal = {
  name: string;
};
interface Dog extends Animal {
  bark(): void;
}
interface Cat extends Animal {
  meow(): void;
}
1
2
3
4
5
6
7
interface Animal {
  name: string;
}
interface Dog {
  bark(): void;
}
type Maltese = Animal & Dog;

상속 받은 타입을 변경할 수도 있음

1
2
3
4
5
6
7
8
interface Merge {
  one: string;
  two: string;
}
interface Merge2 extends Merge {
  one: "one" | "하나";
  two: string;
}

하지만 아예 다른 타입으로는 변경하지 못함

Merge.one의 타입이 string이라서 Merge2.one처럼 string값으로 변경하는 것은 가능하지만, Merge3.one처럼 아예 다른 값(타입)으로 변경하는 불가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
interface Merge {
  one: string;
  two: string;
}
// Error!
// Interface 'Merge3' incorrectly extends interface 'Merge'.
//   Types of property 'one' are incompatible.
//     Type 'number' is not assignable to type 'string'
interface Merge3 extends Merge {
  one: 1234;
  two: string;
}
This post is licensed under CC BY 4.0 by the author.