Typescript에서 type
과 interface
에 대한 유튜브 영상을 보다가 좀 정리해두고 싶어서 글로 남긴다.
예제
// interface 사용
interface User {
name: string;
age: number;
}
// type 사용
type UserType = {
name: string;
age: number;
};
객체 타입을 정의할 때 type
과 interface
둘 다 사용할 수 있다.
타입을 확장하는 데는 차이가 조금 있다. 먼저 논리적으로 불가능한 타입을 확장하는 경우를 살펴보자.
// type 확장
type A = {
a: string;
};
type B = {
a: number;
};
type C = A & B; // type C = A & B
// interface 확장
interface A {
a: string;
}
interface B {
a: number;
}
interface C extends A, B {} // Error: Interface C cannot simultaneously extend types 'A' and 'B'
a
프로퍼티가 string
이면서 number
로 선언되어 있기 때문에 C
타입은 논리적으로 불가능하다.
type으로 선언된 C
의 경우 불가능한 타입임에도 단순 타입간의 intersection으로 표기된다.
반면 interface
의 경우 두 타입을 extends 할 수 없다는 에러가 발생한다.
interface
를 사용하는 것이 에러를 더 빨리 발견할 수 있다는 점에서 장점이 있다고 생각한다. 또한 타입스크립트가 추론해주는 타입도 intersection에 비해 더 명확하다.