객체의 키를 타입으로 안전하게 추론하고자 하는 상황이 자주 발생했습니다. 특히, 객체의 키를 직접적으로 타입으로 정의하려고 할 때, 객체의 구조가 변경되면 타입 정의도 함께 업데이트해야 하는 번거로움이 있었습니다. 이러한 문제는 코드의 유지보수성을 저하시킬 뿐만 아니라, 실수로 인한 타입 오류를 유발할 수 있었습니다.
예를 들어, 다음과 같은 객체가 있을 때:
const userRoles = {
ADMIN: 'admin',
USER: 'user',
GUEST: 'guest',
};
각 키(ADMIN
, USER
, GUEST
)를 타입으로 사용하고자 할 때, 수동으로 타입을 정의하면 객체가 변경될 때마다 타입도 업데이트해야 하는 문제가 있었습니다.
이 문제를 해결하기 위해 keyof typeof
를 활용하여 객체의 키를 자동으로 타입으로 추론하는 방법을 학습하였습니다. keyof typeof
는 객체의 키를 유니언 타입으로 추출할 수 있게 해주어, 객체의 구조가 변경되더라도 타입 정의를 자동으로 업데이트 해줍니다.
1. keyof typeof
의 이해 및 활용
keyof typeof
는 먼저 객체의 타입을 가져오고(typeof
), 그 타입의 모든 키를 유니언 타입으로 추출합니다(keyof
). 이를 통해 객체의 키를 안전하게 타입으로 사용할 수 있습니다.
예시 코드:
// 객체 정의
const userRoles = {
ADMIN: 'admin',
USER: 'user',
GUEST: 'guest',
};
// `keyof typeof`를 사용하여 키 타입 추출
type UserRoleKeys = keyof typeof userRoles;
// 사용 예시
const role: UserRoleKeys = 'ADMIN';
2. 코드 자동 동기화 구현
객체의 구조가 변경될 때마다 타입 정의를 자동으로 업데이트할 수 있도록 keyof typeof
를 적용하였습니다. 예를 들어, 새로운 역할이 추가되거나 기존 역할이 변경될 때, 타입 정의를 별도로 수정할 필요 없이 객체만 업데이트하면 됩니다.
객체 확장 예시:
// 새로운 역할 추가
const userRoles = {
ADMIN: 'admin',
USER: 'user',
GUEST: 'guest',
SUPER_ADMIN: 'super-admin', // 새로운 역할 추가
};
// `keyof typeof`를 사용하여 자동으로 업데이트된 키 타입
type UserRoleKeys = keyof typeof userRoles;
// 새로운 역할 사용 예시
const newRole: UserRoleKeys = 'SUPER_ADMIN';
keyof typeof
를 도입한 후 다음과 같은 개선 효과를 얻었습니다:
keyof typeof
를 활용하여 타입 정의를 자동으로 생성할 수 있게 되어, 객체의 구조 변경 시 타입 정의를 별도로 수정할 필요가 없어졌습니다.