chenshuai2144 / openapi2typescript

一个被大范围使用的小工具
307 stars 136 forks source link

关于嵌入的Object字段的Required属性的处理 #106

Open hlouis opened 1 year ago

hlouis commented 1 year ago

https://github.com/chenshuai2144/openapi2typescript/blame/b035170d8c5a6bea14616a87e1d7ce7b1390440a/src/serviceGenerator.ts#L178

在目前的178行,我们看到对required的处理是:

 const required =
          'required' in (schemaObject.properties[key] || {})
            ? ((schemaObject.properties[key] || {}) as any).required
            : false;

也就是说对于嵌入的对象是通过这个properties定义内部是否有一个required的bool字段来控制的,但是对于OpenAPI和JsonSchema规范来说,一个字段是否required应该是放在和properties同级的required的数组中。

"schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Result"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "total": {
                          "type": "integer",
                          "title": "flow的总数"
                        },
                        "flows": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/FlowMeta"
                          }
                        }
                      },
                      "required": [
                        "total",
                        "flows"
                      ],
                    }
                  },
                  "required": [
                    "data"
                  ],
                }
              ]
            }
}

所以上面的代码应该修改成:

            const required = (schemaObject.required || []).includes(key)

想要了解一下,这样做是不是有什么特别的考虑?

rookie-luochao commented 1 month ago

你这个判断是 swagger2 的判断方法