避免将请求对象从OpenAPI 3.0规范包装到TypeAPI

时间:2019-05-13 21:53:33

标签: typescript swagger openapi openapi-generator

我正在尝试使用读取OpenAPI 3.0规范的OpenAPI Generator 4.0.0-SNAPSHOT(我们的经理出于某种原因要求我们使用该版本)生成Typescript客户端。我们所有当前的端点都可以接受查询字符串中的数据或作为表单主体,并且它们都可以正常工作。我有一个新的端点,它将在POST正文中以JSON格式读取数据(其他端点也将最终转换)。它将接受如下对象:

{email: "something@domain.com"}

我正在尝试按以下方式在YAML中记录端点:

 /users/send-password-reminder:
    post:
      [...]
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
      responses:
        [...]

但是,当我生成Typescript客户端时,它会生成一个SendPasswordReminderRequest对象,该对象包装一个自动生成的InlineObject1对象,该对象包装我的实际email

这使我像这样使用它:

const req: SendPasswordReminderRequest = {
    inlineObject1:{
      email: "..."
  }
};

APIClient.user.sendPasswordReminder(req, ...)

我想要的是完全摆脱InlineObject1,并使SendPasswordReminderRequest直接包装email属性,并能够将其用作:

const req: SendPasswordReminderRequest = {
   email: "..."
};

APIClient.user.sendPasswordReminder(req, ...)

我尝试在components/requestBodies中定义主体并使用$ref,即使它使用了我的请求主体类型的名称,它仍然包裹了实际主体。

我如何摆脱这种包裹?

1 个答案:

答案 0 :(得分:4)

我不确定这是否仍然与您相关,但在代码中我找到了一种方法来解决根本不生成 InlineObjects

如果您为 requestBody 中使用的架构定义“标题”,它将使用此 title 来命名内联对象。

因此,您可以获得类似于以下内容的内容,而不是获取 InlineObject:sendPasswordReminderRequestData,具体取决于您如何命名架构。

希望这对您或其他任何人有帮助:)