devexperts / swagger-codegen-ts

Typesafe Swagger API generator for TypeScript
Mozilla Public License 2.0
80 stars 16 forks source link

JSONSchema case is not supported #180

Open Geksanit opened 9 months ago

Geksanit commented 9 months ago

schema.yaml

...
components:
  schemas:
    BaseSchema:
      type: object
      properties:
        type:
          type: string
          enum: 
          - FOO
          - BAR
          - BAZ
      required:
      - type

    FooSchema:
      allOf:
      - $ref: '#/components/schemas/BaseSchema'
      - type: object
        properties:
          type:
            type: string
            enum:
            - FOO

It is correct JSONSchema FooSchema equal type: type FooSchema = { type: 'FOO' | 'BAR' | 'BAZ' } & { type: 'FOO' | undefined} -> { type: 'FOO' } generated code:

export type BaseSchema = { type: 'FOO' | 'BAR' | 'BAZ' };
export type FooSchema = BaseSchema & { type: Option<'FOO'> };

Nothing can match type FooSchema. I understand that this is the result of a combination of optionFromNullable and intersection. It turns out that we do not fully support the JSONSchema. We could throw away the mistake of not supporting this case. Let's discuss this and think about a solution.