swagger-typescript-api
swagger-typescript-api copied to clipboard
API client with discriminators is generated incorrectly
Hi, here's an example schema:
Example schema
openapi: 3.0.1
info:
title: Example API
version: v1
paths:
/pet:
post:
summary: Create pet
requestBody:
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
type: object
required:
- type
- payload
discriminator:
propertyName: type
mapping:
CAT: '#/components/schemas/cat'
DOG: '#/components/schemas/dog'
properties:
type:
$ref: '#/components/schemas/pet_kind'
payload:
type: object
oneOf:
- $ref: '#/components/schemas/cat'
- $ref: '#/components/schemas/dog'
responses:
'204':
description: all good!
components:
schemas:
cat:
type: object
properties:
name:
type: string
breed:
type: string
dog:
type: object
properties:
name:
type: string
breed:
type: string
pet_kind:
type: string
description: type of animal
enum: [CAT, DOG]
it's a pretty simple schema with discriminator on the property type
that determines the payload
object. There's an enumb called pet_kind
which has two options CAT
and DOG
.
Expected behaviour
It's expected, that the pet_kind
enum would be generated as PetKind
in the data definition section and would be referenced in the API client.
Actual begaviour
The pet_kind
enum is generated correctly in the data definition secion:
/** type of animal */
export enum PetKind {
CAT = "CAT",
DOG = "DOG",
}
but is not referenced correctly in the API client, it is referenced as pet_kind
which gives runtime and type errors:
postPet: (
data: {
data: BaseNull & (BaseNullTypeMapping<pet_kind.CAT, Cat> | BaseNullTypeMapping<pet_kind.DOG, Dog>);
},
params: RequestParams = {},
) =>
this.request<void, any>({
path: `/pet`,
method: "POST",
body: data,
type: ContentType.Json,
...params,
}),
};
}