@nestjs/swagger OpenAPI APIClient出力時エラー

2023/01/20に公開約800字

背景

2年くらい前に作成されたOpenAPIの定義からAPIClientの出力をしたら失敗して、原因調査をした時のメモ。

事象

NestJSからOpenAPIの定義をymlに出力し、そこからフロントエンド用にopenapi-generator-cliからAPIClientを出力しようとすると以下のようなエラーが発生

components.schemas.XXXX.requierd is not of type `array`

XXXXはNest上で定義した型名。
@nestjs/swaggerは4.8.2, generator-cliは5.2.1

XXXXのclass定義はこんな感じ

class XXXX {
   @IsOptional()
   yyyy: { a: string; b: string; };
   
   @IsOptional()
   @IsString()
   zzzz: string;
}

対応

結論としては、{ a: string; b: string; }というインラインでの型定義がよくなく、classで定義すると直った。

class YYYY {
  a: string;
  b: string;
}

class XXXX {
   @IsOptional()
   yyyy: YYYY;
   
   @IsOptional()
   @IsString()
   zzzz: string;
}

命名衝突による不具合

入出力の型として使用するclass名が同名で複数存在する場合(当然、それぞれ独立したファイル上で同名で定義されている)、ymlに出力が可能でも、片方が片方に上書きされているようで不正な型となる。なので、それぞれ別名にする必要があった。

Discussion

ログインするとコメントできます