javascript - OpenAPI - hur man sätter en egenskap som sträng eller array, och om array följer #ref


Jag har följande OpenAPI-specdel:

 *           type:
 *             - string
 *             - array
 *           items:
 *             $ref: '#/components/schemas/objectType'

Jag har ett inmatningsvärde som kan vara en tom sträng eller en array av objekt. När jag genererar modellen ovan ger det mig följande typ:

string | any[]

Men det jag behöver är:

string | objectType[]

Vad gör jag för fel?

Svar #1

Jag tror att du vill använda egenskapen oneOf. Här är ett litet exempel på dokument som jag tror gör det du letar efter.

notera: oneOf är en array av objekt som var och en deklarerar en hel schematyp, snarare än en array av typer intill en items-deklaration som i din kod. Denna inbäddning är viktig och möjliggör uttryck av godtyckligt komplexa unionstyper.

openapi: 3.0.1
info:
  title: Test API
  version: 1.0.0
paths:
  /foo:
    get:
      responses:
        200:
          description: "OK"
          content:
            application/json:
              schema:
                oneOf:         # <--- create a union type
                - type: string # <--- string |
                - type: array  # <--- FooResponseObject[]
                  items:
                    $ref: "#/components/schemas/FooResponseObject"
components:
  schemas:
    FooResponseObject:
      type: object
      properties:
        id:
          type: string
        name:
          type: string

Relaterade artiklar