열거형으로 이름이 있는 상수들의 집합을 정의할 수 있다. 열거형을 사용하면 의도를 문서화하거나 구분되는 사례 집합을 더 쉽게 만들 수 있다. TypeScript는 숫자 기반 / 문자열 기반 열거형을 제공한다.
enum Direction {
Up = 1,
Down, // 2
Left, // 3
Right, // 4
}
위 코드에서 Up
이 1
로 초기화된 숫자 열거형을 선언했다. 그 지점부터 뒤따르는 멤버들은 자동으로 증가된 값을 갖는다.
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);
문자열 열거형에서 각 멤버들은 문자열 리터럴 또는 다른 문자열 열거형의 멤버로 상수 초기화 해야 한다.
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
}
문자열 enum
은 숫자 열거형처럼 자동 증가하는 기능은 없지만, 유의미한 정보를 제공해주는 직렬화가 가능하다는 이점이 있다. 숫자만으로는 이것이 어떤 의미인지 값이 종종 불확실한 경우가 있다.
const
Enumsenum
값에 접근할 때, 추가로 생성된 코드 및 추가적인 간접 참조를 피하기 위해 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); }
ApiQuery
에enum
타입을 넘겨주면,
위와 같이 Swagger에서 선택 drop down을 사용할 수 있다.