타입스크립트에서 타입을 지정하는 방식에는 2가지가 있다
type과 interface를 비교해보자
interface
- 확장(extends), (다중)상속이 가능하다
- 동일한 이름을 여러번 사용 가능(= 하나로 병합)
props를 정의할 때 사용한다
interface A {
a: string;
}
interface B {
b: string;
}
interface C extends A, B {
c: string;
}
const example: C = {
a: "a",
b: "b",
c: "c"
};
interface Car {
drive(): void; // 메소드
wheels: number;
}
interface Boat {
sail(): void;
sails: number;
}
type alias
- 유니언 타입( | ), 인터섹션(&) 타입 지원
- 함수, 튜플, 제네릭 등을 정의 가능
- 기본적인 타입에서 복잡한 구조까지 정의 가능
주요 차이점
1. 확장성
- interface : extends
- type : 확장 불가, 인터섹션으로 다른 타입으로 결합
2. 유니언 타입( | )과 인터섹션(&)
& (intersection) : 여러 타입이 결합된 새로운 타입 생성
interface Colorful {
color: string;
}
interface Circle {
radius: number;
}
type ColorfulCircle = Colorful & Circle;
3. 선언 병합
interface는 동일한 이름으로 선언 시 병합되지만, type은 선언이 안됨
index signature
객체의 속성 키와 값 타입을 정의하는 방법 (객체 속성이 동적으로 정의될 때)
인덱스 시그니처는 2가지의 조건을 만족해야한다
1. 인덱스 시그니처는 객체의 모든 속성이 동일한 타입이여야 한다
interface StringDictionary {
[key: string]: string; // index signature
}
const myDictionary: StringDictionary = {
firstName: "John",
lastName: "Doe"
};
interface InvalidDictionary {
[key: string]: string;
length: number; // 오류: 인덱스 시그니처와 충돌 (string 타입이 아니므로)
}
2. 특정 속성을 사용할 때는, 인덱스 시그니처 타입과 호환되어야 한다
interface CustomDictionary {
[key: string]: string | number;
length: number; // 특정 속성
name: string; // 특정 속성
}
'🐠 FrontEnd > JS & TS' 카테고리의 다른 글
TypeScript Exercises 문제 풀이와 개념 정리 (0) | 2025.05.21 |
---|---|
tanstackQuery에서 useQuery, useMutation 타입 지정하기 (0) | 2024.07.23 |
비슷해서 헷갈리는 Rest 파라미터, spread 연산자 (0) | 2024.07.02 |
고유 식별자를 생성하는 uuid와 crypto.randomUUID (0) | 2024.05.28 |