OpenAPI Generator无法正确生成含allOf结构的代码,求解决方案
解决方案
1. 修正OpenAPI规范文件结构
你的第一个YAML写法不符合OpenAPI规范:allOf与同级的type: object/properties不能共存,OpenAPI会优先识别allOf并忽略同级属性定义。正确写法是把自定义属性放到allOf的第二个元素中(即你调整后的结构),后续通过生成器配置合并类型以避免多余接口:
allOf: - $ref: '../../common/UserDto.yml' - type: object properties: adresses: type: array items: $ref: '../../common/AddressDto.yml'
2. 配置生成器合并allOf结构
你使用--openapi-normalizer REF_AS_PARENT_IN_ALLOF=true报错,是因为@openapitools/openapi-generator-cli的包装器需要将核心生成器参数通过配置文件或者特定命令行格式传递。推荐在openapitools.json的additionalProperties中添加持久化配置:
{ "$schema": "node_modules/@openapitools/openapi-generator-cli/config.schema.json", "spaces": 2, "generator-cli": { "version": "6.4.0", "generators": { "v3.1": { "generatorName": "typescript-axios", "output": "#{cwd}/src/generated/openapi", "glob": "./openapi/source/api.yml", "additionalProperties": { "ngVersion": "6.1.7", "npmName": "restClient", "supportsES6": "true", "npmVersion": "6.9.0", "withInterfaces": true, "withSeparateModelsAndApi": true, "modelPackage": "model", "apiPackage": "api", // 添加合并allOf的核心配置 "openapiNormalizer": "REF_AS_PARENT_IN_ALLOF=true", "mergeAllOf": true } } } } }
REF_AS_PARENT_IN_ALLOF=true:让生成器将allOf中的引用作为父类型,合并后续自定义属性mergeAllOf=true:强制将allOf结构合并为单一接口,避免生成多余的UserAdressesDtoAllOf中间类型
3. 命令行参数传递方式(可选)
如果要通过命令行临时传递参数,需要用--将参数转发给底层核心生成器:
npx @openapitools/openapi-generator-cli generate -- --openapi-normalizer REF_AS_PARENT_IN_ALLOF=true --merge-all-of true
4. 预期生成结果
配置完成后重新生成,会得到符合预期的合并接口:
import { AddressDto } from './address-dto'; import { UserDto} from './user-dto'; /** * @type UserAdressesDto * @export */ export interface UserAdressesDto extends UserDto { adresses?: AddressDto[]; }
内容的提问来源于stack exchange,提问作者Renaud is Not Bill Gates
相关产品推荐
相关产品推荐

