본문 바로가기
개발 프레임워크/NestJS

[NestJS] Type(타입)_Swagger

by minhyeok.lee 2023. 2. 9.
반응형

Swagger에서 parameters(매개변수)의 타입

 * Parameter(매개변수)의 속성 유형을 명시적으로 설정하려면 type키를 사용한다.

@ApiProperty({
  type: Number,
})
age: number;

 

물론 명시적으로 타입을 작성하지 않아도 Swagger 모델에 타입이 명시되기는 한다.

export class CreateUserDto {
  @ApiProperty({ type: Number })
  name: string;

  @ApiProperty({})
  age: number;

  @ApiProperty({ type: String })
  major: string;
}

위와 같은 코드가 있다면 Swagger에서 표시될 때,

 

위 CreateUset Dto의 Schema
위 CreateUset Dto의 Schema

해당 Swagger에서 알 수 있듯이

@ApiProperty({})
age: number;

위와 같이 선언을 해도 type이 나오기는 한다.

 

@ApiProperty({ type: Number })
name: string;

@ApiProperty({ type: String })
major: string;

@ApiProperty에 type키를 사용하는데 name속성이 SwaggerSchema(모델)에서 number로 출력되는 것을 보면 @ApiProeprty의 type속성이 typeScript에서 타입지정보다 우선순위가 높게 Swagger에 반영된다는 것을 알 수 있다.

 

1. 실제 NestJS내부에서는 name은 string으로 읽는다. 

2. Swagger 문서에서는 name은 number이다.

3. 속성이 실제로 동작하는 타입과 형상관리되는 문서에서 명시된 타입이 다르다.

4. 이는 큰 문제이므로 두 타입을 통일시키도록 하자.

반응형

댓글