openapi-ts / openapi-typescript

Generate TypeScript types from OpenAPI 3 specs
https://openapi-ts.dev
MIT License
5.64k stars 455 forks source link

Problem after using ver 7 with generated types for mapping of discriminator #1737

Closed nenadfspartans closed 2 months ago

nenadfspartans commented 3 months ago

Description

This was working before ver 7 and it creates working code for my usecase.

This is what creates problem for me:

This is request body that can accept one of these options.

schema:
              oneOf:
                - $ref: '#/components/schemas/Model1'
                - $ref: '#/components/schemas/Model2'
              discriminator:
                propertyName: template
                mapping:
                  model1: '#/components/schemas/Model1'
                  model2: '#/components/schemas/Model2'

Here we define descriminator, redocly populates last 2 rows of mapping, it was not problem with 6.7.0

Document:
      type: object
      properties:
        template:
          $ref: '#/components/schemas/TemplateField'
      discriminator:
        propertyName: template
        mapping:
          model2: '#/components/schemas/Model2'
          model1: '#/components/schemas/Model1'
          Model1: '#/components/schemas/Model1'
          Model2: '#/components/schemas/Model2'

Generated code with v6.7.0, perfectly fine for my needs.

 Model1: {
      template: "model1";
    } & Omit<components["schemas"]["Document"], "template"> & {
      data: {
        page: number;
        batch: {
          sku: string;
          name: string;
        };
        totalPages: number;
        images: components["schemas"]["ImageUrlObject"][];
      };
    };

Generated code with v7.0.0

Model1: Omit<components["schemas"]["Document"], "template"> & {
            data: {
                page: number;
                batch: {
                    sku: string;
                    name: string;
                };
                totalPages: number;
                images: components["schemas"]["ImageUrlObject"][];
            };
        } & {
            /**
             * @description discriminator enum property added by openapi-typescript
             * @enum {string}
             */
            template: "model1";
        } & {
            /**
             * @description discriminator enum property added by openapi-typescript
             * @enum {string}
             */
            template: "model2" | "Model1";
        };

Thanks!

Checklist

mzronek commented 3 months ago

Your bug report is not complete. Please provide a minimum example with all necessary schemas. In your case the models are missing.

nenadfspartans commented 3 months ago

probably duplicate of #1700

imjuni commented 3 months ago

@nenadfspartans Hello,

I have same problem. But I think that raised by TypeScript version and VSCODE. I was change TypeScript version 5.5.2 > 5.4.5, This problem not occured.

Can someone tell me how I can fix or walkaround this issue in TypeScript 5.5.x?

nenadfspartans commented 3 months ago

I am on 5.4.5 and have this problem.

mzronek commented 3 months ago

The OP's problem is not a Typescript issue. The generated type is wrong. If anyone has this problem, please post an example for reproduction.