openapi-codegen icon indicating copy to clipboard operation
openapi-codegen copied to clipboard

`oneOf` support via Discriminated Unions

Open rrichardson opened this issue 5 years ago • 1 comments

Many of the target languages support Union types.
e.g. for TypeScript, I think oneOf could be rendered as Discriminated Unions.

Does openapi-codegen support these at the moment? I see one mention of it in the templates, inside of the htmlDocs2 template. It looks like it is just introspecting the root object, though. It would be nice to see them treated as a 1st class template object similar to enums and "generics"

Example

components:
  schemas:
    ObjA:
      properties: ...
    ObjB:
      properties: ...
    ObjC:
      properties: ...
    Foo:
      oneOf:
        - $ref: "#/components/schemas/ObjA"
        - $ref: "#/components/schemas/ObjB"
        - $ref: "#/components/schemas/ObjC"

Should result in

export type Foo =  ObjA | ObjB | ObjC;

rrichardson avatar May 28 '20 17:05 rrichardson

It would be helpful if you could give an example of what needs providing in the model to be able to support this in the templates?

MikeRalphson avatar Jan 14 '21 09:01 MikeRalphson