처음 타입스크립트를 쓸 때 interface
랑 type
이 너무 비슷해 보여서 헷갈렸다.
실제로 대부분 상황에선 둘 다 쓸 수 있는데, 미묘한 차이들이 있어서 정리해봤다.
interface User {
name: string;
age: number;
}
type User = {
name: string;
age: number;
}
extends
가능interface
는 확장이 직관적interface Animal {
name: string;
}
interface Dog extends Animal {
breed: string;
}
type
은 유니온이나 인터섹션으로 조합type Animal = {
name: string;
}
type Dog = Animal & {
breed: string;
}
type
만 가능type Status = "loading" | "success" | "error";
type Point = [number, number];
type Custom = string | number;
interface
만 가능interface Box {
width: number;
}
interface Box {
height: number;
}
// Box = { width: number; height: number; }
type
은 이렇게 중복 선언하면 오류 남
interface
type
개인적으로는 구조적인 타입 정의나 컴포넌트 props 같은 경우는 interface
가 더 읽기 편했고,
상태나 특정 타입 조합에는 type
이 훨씬 자유롭게 느껴졌다.
처음에는 차이를 모르고 막 썼는데, 이제는 목적에 따라 골라 쓰는 게 중요하다는 걸 알게 됐다.
"타입스크립트는 자유롭지만, 그 자유엔 책임이 따른다..."