Record는 TypeScript에서 제공하는 유틸리티 타입으로, 객체의 키와 값의 타입을 명시적으로 지정할 때 사용됩니다. 이를 통해 객체의 구조를 더 명확히 정의할 수 있습니다.
기본 문법
Record<Keys, Type>
- Keys: 객체의 키 타입 (일반적으로 문자열, 숫자, 또는 유니온 타입).
- Type: 키에 해당하는 값의 타입.
사용 예시
1. 간단한 객체 정의
type User = Record<string, string>;
const users: User = {
id: '123',
name: 'Alice',
};
- string 키: 객체의 모든 키가 문자열이어야 함.
- string 값: 모든 값이 문자열이어야 함.
2. 키와 값의 타입을 명시적으로 정의
type Settings = Record<'theme' | 'layout', string>;
const appSettings: Settings = {
theme: 'dark',
layout: 'grid',
};
- 키는 'theme' 또는 'layout' 중 하나만 가능.
- 각 키의 값은 string 타입이어야 함.
3. 유니온 타입 키 사용
type Data = Record<'success' | 'error', boolean>;
const response: Data = {
success: true,
error: false,
};
- 키는 success 또는 error만 가능.
- 값은 각각 boolean 타입이어야 함.
Record를 사용하는 이유
- 명확하고 간결한 표현:
- 객체 타입을 정의할 때, Record를 사용하면 의도가 더 명확히 드러납니다.
- 예: Record<string, number>는 "모든 키는 문자열이고, 값은 숫자"라는 의미.
- 유연성:
- Record는 다양한 키 타입과 값 타입을 지원하므로 복잡한 객체 구조를 쉽게 정의할 수 있습니다.
- 표준화:
- Record는 TypeScript에서 제공하는 표준 유틸리티 타입이므로, 커뮤니티에서 널리 사용되며 가독성이 좋습니다.
비교: 인덱스 시그니처와 Record
인덱스 시그니처
type User = { [key: string]: string };
const users: User = {
id: '123',
name: 'Alice',
};
Record
type User = Record<string, string>;
const users: User = {
id: '123',
name: 'Alice',
};
- 기능적으로 동일하지만, Record는 의도를 명확히 드러내고 코드 가독성을 높입니다.
Record의 한계
- 고정된 키:
- 특정 키가 반드시 존재해야 하는 경우, interface나 다른 방법이 더 적합할 수 있습니다.
- 예: interface를 사용하면 선택적 속성(?)이나 필수 속성을 혼합하여 정의 가능.
- 추가적인 제한이 필요한 경우:
- Record는 키와 값의 타입만을 정의하므로, 더 복잡한 제약 조건을 추가할 때는 한계가 있습니다.
'Programming Language > JS & TS' 카테고리의 다른 글
[TS] Type Guard 와 as 키워드 (0) | 2024.10.31 |
---|---|
[JS] every 메소드로 객체 속 값 비교하기 (0) | 2024.10.22 |
[TS] interface와 type 비교 및 상속, 그리고 Omit과 Pick 활용 (0) | 2024.10.21 |
[JS] Prototype과 __proto__ (1) | 2024.10.17 |
event.preventDefault & event stopPropagation (0) | 2024.10.10 |