체인의정석

Typescript) string을 받아와서 enum으로 고칠 경우 any를 안쓰고 타입체크하는 방법 본문

개발/backend

Typescript) string을 받아와서 enum으로 고칠 경우 any를 안쓰고 타입체크하는 방법

체인의정석 2021. 7. 30. 15:20
728x90
반응형

타입스크립트에서 타입을 any로 지정하는것은 최대한 지양해야하는 부분이다.

따라서 아래와 같이 any 타입으로 지정되어 있는 부분을 string으로 받아와서 enum으로 고칠 수 있다.

 

여기서 사용한 것은 key of type of로 특정 변수를 문자열로 받아와서 key of type of를 사용하면 enum 타입에 해당되며 해당 키가 있는지를 체크하여 리턴 해줄 수 있다.

 

keyof 는 객체의 키 값을 나타내며

type of는 해당 값의 타입을 나타낸다.

 

B가 enum이고 A가 string입력 값일때

A as keyof typeof B 와 같이 사용하면 A라는 string을 B에 대핟하는 키 값과 타입으로 바꿔주는 역할을 한다. 

따라서 이 구문을 이용하여 체크가 가능하다.

 

참고링크

https://stackoverflow.com/questions/55377365/what-does-keyof-typeof-mean-in-typescript

 

What does "keyof typeof" mean in TypeScript?

Example: Explain to me what keyof typeof means in TypeScript enum ColorsEnum { white = '#ffffff', black = '#000000', } type Colors = keyof typeof ColorsEnum; The last row is equivalent ...

stackoverflow.com

예시는 아래와 같다.

 

any가 들어간 코드

export enum LegalPersonNameTypeCode {
  LEGL = "LEGL", // Legal name
}

export function toLegalPersonNameTypeCode(legalPersonNameIdentifierTypeParam: string) {
  const legalPersonNameIdentifierType: LegalPersonNameTypeCode = (<any>LegalPersonNameTypeCode)[
    JSON.stringify(legalPersonNameIdentifierTypeParam)
  ];

  if (legalPersonNameIdentifierType) {
    return legalPersonNameIdentifierType;
  }
  throw new Error(`${legalPersonNameIdentifierType} must be one of 'LEGL',,,,,`);
}

수정한 코드

export function toLegalPersonNameTypeCode(legalPersonNameIdentifierTypeParam: string) {
  if (!(legalPersonNameIdentifierTypeParam in LegalPersonNameTypeCode)) {
    throw new Error(`LegalPersonNameType must be one of 'LEGL'..... `);
  }

  return LegalPersonNameTypeCode[legalPersonNameIdentifierTypeParam as keyof typeof LegalPersonNameTypeCode];
}
728x90
반응형
Comments