본문 바로가기

Backend/NestJS

keyof와 typeof

파일을 둘러보다보니, 다음과 같은 코드가 있었다. 

export const ActivityType = { 
	... 
} as const; 

export type ActivityType = (typeof ActivityType)[keyof typeof ActivityType];

도대체 typeof와 keyof가 무엇이냐 말이다! 

결론적으론, ActivityType 내부에 쓰여진 항목들을 다른 파일에서 import 해와서 잘 쓸 수 있다는 것. 

 

일단 정의를 보자면, 

typeof : 객체 데이터를 객체 타입으로 변환해주는 연산자 

객체는, 객체 자체를 type으로 쓸 수 없는데 객체에 쓰인 type 구조를 그대로 가져와 독립된 타입으로 만들어 사용하고 싶을때 사용한다 

* class는 class 자체가 객체 type이 될 수 있어 typeof는 필요 없다. 

 

keyof : 객체 형태의 타입을 따로 속성들만 모아 union type(A OR B의 개념)으로 만들어주는 연산자 

 

https://inpa.tistory.com/entry/TS-%F0%9F%93%98-%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-keyof-typeof-%EC%82%AC%EC%9A%A9%EB%B2%95 여기 예제를 참고해보면 좋다.