⛳
@nestjs/swagger OpenAPI APIClient出力時エラー
背景
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