타입스크립트에서 명명된 타입을 정의할 때 type과 interface 두 가지 방법을 사용할 수 있습니다. 대부분의 상황에서는 둘 다 사용할 수 있지만, 몇 가지 중요한 차이점들이 있습니다.
둘 다 객체의 형태를 정의할 수 있습니다.
// type 사용
type TUser = {
name: string;
age: number;
};
// interface 사용
interface IUser {
name: string;
age: number;
}
둘 다 함수의 타입을 정의할 수 있습니다.
// type 사용
type THandler = (event: Event) => void;
// interface 사용
interface IHandler {
(event: Event): void;
}
둘 다 제네릭을 지원합니다.
// type 사용
type TContainer<T> = {
value: T;
};
// interface 사용
interface IContainer<T> {
value: T;
}
둘 다 클래스가 구현할 계약을 정의할 수 있습니다.
class MyClass implements TUser {
name = 'John';
age = 30;
}
class MyClass2 implements IUser {
name = 'Jane';
age = 25;
}
서로 확장할 수 있습니다.
// interface가 type을 확장
interface IExtended extends TUser {
email: string;
}
// type이 interface를 확장
type TExtended = IUser & {
email: string;
};