TypeScript (6) Enums

Jiwon Youn·2021년 3월 23일
0

TypeScript

목록 보기
6/6

Enums

열거형으로 이름이 있는 상수들의 집합을 정의할 수 있다. 열거형을 사용하면 의도를 문서화하거나 구분되는 사례 집합을 더 쉽게 만들 수 있다. TypeScript는 숫자 기반 / 문자열 기반 열거형을 제공한다.

Numeric Enums (숫자 열거형)

enum Direction {
 Up = 1,
 Down, 	// 2
 Left, 	// 3
 Right,	// 4
}

위 코드에서 Up1로 초기화된 숫자 열거형을 선언했다. 그 지점부터 뒤따르는 멤버들은 자동으로 증가된 값을 갖는다.

enum Direction {
 Up, 	// 0
 Down, 	// 1
 Left, 	// 2
 Right,	// 3
}

원한다면 초기화하지 않을 수도 있다. 위 경우 Up 값은 0부터 시작해 뒤따르는 멤버들은 자동으로 증가된 값을 갖는다. 자동 증가되는 기능은 각 값이 같은 enum의 다른 값과 구별되어야 하는 경우에 유용하다.

enum의 사용은 아래와 같이 한다. 열거형 자체에서 프로퍼티로 모든 멤버에 접근하며, 열거형의 이름을 사용해 타입을 선언한다.

enum Response {
 No = 0,
 Yes = 1,
}

function respond(recipient: string, message: Response): void {
 // ...
}

respond("Princess Caroline", Reponse.Yes);

String Enums (문자열 열거형)

문자열 열거형에서 각 멤버들은 문자열 리터럴 또는 다른 문자열 열거형의 멤버로 상수 초기화 해야 한다.

enum Direction {
 Up = "UP",
 Down = "DOWN",
 Left = "LEFT",
 Right = "RIGHT",
}

문자열 enum은 숫자 열거형처럼 자동 증가하는 기능은 없지만, 유의미한 정보를 제공해주는 직렬화가 가능하다는 이점이 있다. 숫자만으로는 이것이 어떤 의미인지 값이 종종 불확실한 경우가 있다.

const Enums

enum 값에 접근할 때, 추가로 생성된 코드 및 추가적인 간접 참조를 피하기 위해 const 열거형을 사용할 수 있다.

const enum Directions {
 Up,
 Down,
 Left,
 Right
}

let directions = [Directions.Up, Directions.Down, Directions.Left, Directions.Right]

위 코드는 아래와 같이 컴파일된다.

var directions = [ 0, 1, 2, 3 ];

💡 Swagger에서 enum 사용하기

enum 객체 선언

export enum BucketType {
 SI_CHATBOT = 'SI_CHATBOT_BUCKET',
 DEV = 'DEV_BUCKET',
}

Controller

@Post('file')
  @UseInterceptors(FileInterceptor('file'))
  @ApiConsumes('multipart/form-data')
  @ApiBody({
    description: 'image upload',
    type: FileUploadDto,
  })
  @ApiQuery({ name: 'bucket', enum: BucketType })
  uploadFile(
    @UploadedFile() file: BufferedFile,
    @Query('bucket') bucketType: BucketType,
  ) {
    console.log(file);
    return this.uploadService.uploadFile(file, bucketType);
  }

ApiQueryenum 타입을 넘겨주면,
위와 같이 Swagger에서 선택 drop down을 사용할 수 있다.

참고 문서

0개의 댓글