Record 타입이란 객체 데이터의 타입을 지정할 때,사용한다.
// Record를 사용한 경우
const info:Record<string,string> = {
name :"jev",
email:"cjcjcjc@cjcjcjcj.com"
}
// interface를 사용한 경우
interface Iinfo {
name : stirng;
email: string;
}
const info : Iinfo = {
name :"jev",
email:"cjcjcjc@cjcjcjcj.com"
}
위의 예시에서 Record를 사용한 경우는 key값에 대한 제한 범위 string으로 제한 범위가 크다.
name과 email로만 key을 제한하려면 다음과 같이 사용할 수 있다.
type InfoKey = "name" | "email" | "age" |"marriage" | "job";
// Record를 사용한 경우
const info:Record<InfoKey,string | number | boolean> = {
name :"jev",
email:"cjcjcjc@cjcjcjcj.com"
age : 26,
marriage : false,
job:"developer"
}
// interface를 사용한 경우
interface Iinfo {
name : stirng;
email: string;
age : number;
marriage:boolean;
job:string;
}
const info : Iinfo = {
name :"jev",
email:"cjcjcjc@cjcjcjcj.com"
age : 26,
marriage : false,
job:"developer"
}
프로젝트에서 객체에 많은 데이터를 가지고 있는 경우가 많은데, 보통 interface를 사용해서 데이터 타입을 지정하곤 했다.
하지만 Record를 사용해서도 사용하는 방법도 있을 것 같다.
Record를 사용할 경우, 타입 선언시 인터페이스보다 코드 길이가 짧아질 수 있긴 하지만 value 타입이 특정 타입 하나가 아닌 여러 개의 타입일 경우에는 타입 범위가 넓어져 좋은 쓰임새는 아닌 것 같다.
value 타입이 특정 타입으로 일정하고 key 값을 특정 값으로 특정값으로 제한하고 싶다면 key 타입만 유니온 타입이나 enum 타입으로 지정해주어 좋은 쓰임새가 될 수도 있을 것 같다.