카테고리 없음

타입스크립트 Record Type

노엠디엔 2024. 8. 30. 17:27

타입스크립트 공부 중 Record Type이라는 타입을 알게 되어서 정리를 해보려고 한다.

 

 Record <Key, Value>

키가 Key 타입이고 값이 Value인 객체 타입

 

  • Key: 객체의 키로 사용할 수 있는 문자열, 숫자, 심볼 등의 타입
    일반적으로 문자열 리터럴 타입이나 유니언 타입을 사용합니다.
  • Type: 해당 키에 매핑될 값의 타입을 정의합니다.

 

Idex Signature(인덱스 시그니쳐)

Record타입에 사용 방법은 IdexSignature 방법과 유사한데

Idex Signature는  객체의 키와 값의 타입을 정의하는 데 되며 
객체의 모든 키가 동일한 타입을 가지며,
그에 대응하는 값도 특정 타입을 가져야 할 때 사용

typ Scores {
  [key: string]: number;
}

const scores: Scores = {
  alice: 90,
  bob: 85,
  charlie: 72,
};

 

Index Signature 문제는

key값에 문자열 리터럴을 사용하지 못한다!!

// An index signature parameter type cannot be a literal type or generic type.
//  Consider using a mapped object type instead
type Score = {
	[name: '사과' | '바나나']: number;
}

 

Record 타입은?

 

  • 문자열 리터럴 또는 유니언 타입 사용가능
  • 키의 집합이 고정
  • 키는 특정 값들로 제한되며, 해당 값들만 객체의 키로 사용
  • 모든 키가 같은 타입

 

type User = 'alice' | 'bob' | 'charlie';

const scores: Record<User, number> = {
  alice: 90,
  bob: 85,
  charlie: 72,
};

 

  Index Signature Record Type
키의 타입 주로 string, number, symbol 특정 리터럴 타입 또는 유니언 타입
키의 집합 모든 키가 허용된 타입을 따름
(키에 대한 제한이 거의 없음)
특정 키 집합으로 제한됨
사용 시점 모든 키가 동일한 타입일 때
제한 없는 키를사용할 때
특정 키 집합이 존재하고,
키들에 대해 명확한 타입 제약이
필요할 때
정의 방법 인터페이스 또는
타입 에일리어스로 정의
Record<Keys, Type>
유틸리티 타입으로 정의
타입 체크 강도 키에 대한 타입 제약이 상대적으로 약함 키 집합이 고정되어 있어
엄격한 타입 체크 가능

 

Idex Signature 적합한 경우는?
객체의 키가 동적으로 결정되고,
특정 키에 제한을 두지 않으면서 값 타입을 정의할 때

 

Record Type 적합한 경우:
객체의 키가 고정되어 있으며, 특정 키 집합에 대해 값 타입을 정의할 때

 

Record Type 사용 해보기

사용자가 입력한 패스워드를 볼 수 있게 끔 클릭할 수 있는
눈 모양의 아이콘에 상태관리 도구 zustand를 활용하여 사용해 보았다.

 

 

결과