반응형
1. 타입 별칭 이란
타입 별칭은 특정 타입이나 인터페이스를 참조할 수 있는 타입 변수를 의미합니다
// string 타입을 사용할 때
const name: string = 'capt';
// 타입 별칭을 사용할 때
type MyName = string;
const name: MyName = 'capt';
//interface 레벨의 복잡한 타입도 가능
type Developer = {
name: string;
skill: string;
}
//타입 별칭에 제네릭도 사용할 가능
type User<T> = {
name: T
}
2. type vs interface
type 진영
타입스크립트에서 type과 interface는 객체를 선언할 때 매우 유사한 구조입니다. 논란의 여지가 있지만 대부분의 경우 일관되게 type을 사용하고 다음 중 하나에 해당하는 경우에만 interface를 사용하는 것이 좋습니다.
- interface의 "merging" 기능을 활용하고 싶을 때.
- 클래스/인터페이스 계층을 포함하는 OO 스타일 코드를 가지고 있을 때.
위의 경우가 아니면, 항상 더 다용도적인 type을 사용하면 코드가 더 일관성 있게 됩니다.
interface 진영
타입 별칭과 인터페이스의 가장 큰 차이점은 타입의 확장 가능 / 불가능 여부입니다. 인터페이스는 확장이 가능한데 반해 타입 별칭은 확장이 불가능합니다. 따라서, 가능한 한 type 보다는 interface로 선언해서 사용하는 것을 추천합니다.
내 생각
타입스크립트에서 `type`과 `interface`는 모두 타입 정의를 위해 사용되는 기능입니다. 각각의 사용 시나리오는 다음과 같습니다.
type 사용 시나리오:
- 새로운 타입을 정의하고 싶을 때 사용합니다.
- 유니온 타입(Union types), 인터섹션 타입(Intersection types), 튜플 타입(Tuple types) 등의 복잡한 타입을 정의할 때 유용합니다.
- 타입의 조건부 유형(Conditional types)을 사용하여 타입을 조작하고 싶을 때 사용합니다.
- 리터럴 타입(Literal types)을 정의하고자 할 때 사용합니다.
예시:
type Point = {
x: number;
y: number;
};
type Color = 'red' | 'blue' | 'green';
type Coordinates = [number, number];
type PartialPoint = Partial<Point>; // 모든 속성이 선택적인 타입
type CustomType<T> = T extends string ? string : number; // 타입의 조건부 유형 사용
interface 사용 시나리오:
- 클래스나 객체의 구조를 정의하고, 해당 구조를 구현하는 것에 중점을 둘 때 사용합니다.
- 클래스나 객체의 멤버(프로퍼티, 메서드)의 타입을 명시하고, 해당 멤버들에 대한 구현을 요구하고 싶을 때 사용합니다.
- 타입 확장(extends)을 통해 인터페이스를 상속받거나 구현할 수 있습니다.
- 동일한 이름의 인터페이스를 선언하면, 자동으로 병합(merge)됩니다.
예시:
interface Point {
x: number;
y: number;
}
interface Shape {
color: string;
draw(): void;
}
interface Circle extends Shape {
radius: number;
}
interface Square extends Shape {
sideLength: number;
}
class MyCircle implements Circle {
color: string;
radius: number;
constructor(color: string, radius: number) {
this.color = color;
this.radius = radius;
}
draw() {
console.log(`Drawing a ${this.color} circle with radius ${this.radius}.`);
}
}
일반적으로 type과 interface는 서로 유사한 기능을 제공하지만, 몇 가지 차이점이 있습니다. 예를 들어, type은 유니온 타입과 인터섹션 타입 등의 고급 타입 기능을 더 많이 제공하며, interface는 타입 확장과 병합 등의 기능이 강력합니다. 따라서 사용 시나리오에 따라 선택하면 됩니다. 대부분의 경우에서 interface를 사용하는 것이 좋지만, type은 복잡한 타입 정의나 타입 조작이 필요한 경우에 유용합니다.
반응형
'기억보단 기록을 > Typescript' 카테고리의 다른 글
[Typescript] Section 07. Enum (0) | 2023.05.20 |
---|---|
[Typescript] Section 06. 연산자를 이용한 타입 정의 (0) | 2023.05.20 |
[Typescript] Section 04. 인터페이스 (0) | 2023.05.20 |
[Typescript] Section 03. 기본타입 (0) | 2023.05.20 |
[Typescript] Section 02. 타입스크립트 시작하기 (1) | 2023.05.20 |