TypeScript에서 Type과 Interface의 차이점에 대해 알아보겠습니다.
Type vs Interface
// Object 선언할 때
interface IObject {
x: number;
y: number;
}
type TObject = {
x: number;
y: number;
}
// Function 선언할 때
interface IFunction {
(x: number, y: number): number;
}
type TFunction = (x: number, y: number) => number;
interface와 type은 객체나 함수의 타입을 선언하는 데 사용될 수 있습니다.
type은 할 수 있지만 interface에서는 할 수 없는 것들
primitive 타입 선언하기
type에서는 primitive 타입을 선언할 수 있지만, interface에서는 할 수 없습니다.
type Name = string;
Union 타입 선언하기
type에서는 union 타입을 선언할 수 있습니다.
type UnionType = string | number;
primitive List 또는 Tuple 타입 선언하기
type에서는 primitive list 또는 tuple타입을 선언할 수 있습니다.
type TupleType = [number, string];
interface에서는 할 수 있지만 type에서는 못하는 것들
interface Merging
interface는 같은 이름의 interface를 선언할 때, 자동으로 합쳐집니다.
이를 "Interface Merging"이라고 합니다.
interface IRectangle {
height: number;
}
interface IRectangle {
width: number;
}
let rectangle: IRectangle = {
height: 200,
width: 100,
}
type에서는 위와 같은 방식으로 선언할 수 없습니다.
클래스 구현
interface는 클래스에서 구현할 수 있습니다.
클래스에서 interface를 구현하면 해당 인터페이스의 프로퍼티와 메서드를 반드시 구현해야 합니다.
interface GetXnY {
getX: (x: number) => number;
getY: (y: number) => number;
}
class Review implements GetXnY {
getY = (x: number) => { return x };
getX(x: number) {
return x;
}
}
어떤 것을 선택할지는 프로젝트의 특정 요구사항과 스타일에 따라 다를 수 있습니다.
일반적으로는 interface를 먼저 고려하고 type이 더 적합할 때 사용하는 것이 좋습니다.
'Backend > TypeScript' 카테고리의 다른 글
| JavaScript heap out of memory 에러 해결하기 (0) | 2024.11.12 |
|---|---|
| [TypeScript] type predicate (타입 프리디케이트) (0) | 2024.01.07 |
| [TypeScript] Statement와 Expression(문장과 표현식) (0) | 2024.01.06 |
| [TypeScript] Overloading 오버로딩 (0) | 2023.12.30 |
| [TypeScript] 함수 시그니처 타입으로 선언하기 (0) | 2023.12.22 |