Typescript에서 타입을 정의할 때 사용하는 2가지 방법 interface
와 type
.
비슷한 거 같은데 왜 나눠놓았는지 궁금해서 찾아봤습니다🙂
공통점을 먼저 보자면,
두 방법 모두 객체의 타입이나 함수의 타입을 정의할 수 있고
변수 타입, 함수의 반환값을 지정해주며, 확장이 가능하다는 공통점이 있습니다.
type User = {
name: string,
age: number
}
interface User = {
name: string,
age: number
}
타입 별칭이라고 부르며, 새로운 타입을 정의하고 싶을 때 사용합니다.
type str = string;
interface동일한 이름으로 선언을 하면 오류가 나고, &
을 사용하여 확장만 가능합니다.
type User = {
name: string,
age: number
}
type Student = User & {
country: string
}
const kim: Student = {
name: 'Kim',
age: 20,
country: 'South Korea'
}
type fruit = 'banana' | 'apple' | 'grape'
type Tuple = [string, number];
interface는 type과 달리 동일한 이름을 사용하면 병합이 되며 확장됩니다.
interface Box {
weight: number;
}
interface Box {
height: number;
}
const container: Box = {
weight: 100,
height: 100
}
extends를 사용해 확장도 가능합니다.
interface User {
name: string;
age: number;
}
interface Student extends User {
country: string;
}
const kim: Student = {
name: 'Kim',
age: 20,
country: 'South Korea'
}
튜플이나 원시값 타입 선언 등 Type
을 써야할 때가 아니라면 가능한 Interface
를 사용합니다.
이게 Typescript 팀에서 권장하는 방향이라고 하네요🙂