OneOf Subtyping - Generators were failing to generate proper discriminators
Closed this issue · 3 comments
pixellos commented
Tested on generators:
- TypeScript
- TypeScript-fetch
Given:
- User is using subTypes to create polymorphic ode
Whe:
- Code is generated
Then
- Discriminators are not taken into account
Should:
- Code should be discriminators aware
Old behavior:
Generated code with discriminators not compiling
No discriminators:
export class Base {
'str': string;
'i': number;
static readonly discriminator: string | undefined = undefined;
static readonly attributeTypeMap: Array<{name: string, baseName: string, type: string, format: string}> = [
{
"name": "str",
"baseName": "str",
"type": "string",
"format": ""
},
{
"name": "i",
"baseName": "i",
"type": "number",
"format": "int32"
} ];
static getAttributeTypeMap() {
return Base.attributeTypeMap;
}
public constructor() {
}
}
export class A {
'str': string;
static readonly discriminator: string | undefined = undefined;
static readonly attributeTypeMap: Array<{name: string, baseName: string, type: string, format: string}> = [
{
"name": "str",
"baseName": "str",
"type": "string",
"format": ""
} ];
static getAttributeTypeMap() {
return A.attributeTypeMap;
}
public constructor() {
}
}
Expected Behavior (current):
export class Base {
'type'?: string;
'i': number;
'l': number;
static readonly discriminator: string | undefined = "type";
static readonly attributeTypeMap: Array<{name: string, baseName: string, type: string, format: string}> = [
{
"name": "type",
"baseName": "type",
"type": "string",
"format": "string"
},
{
"name": "i",
"baseName": "i",
"type": "number",
"format": "int32"
},
{
"name": "l",
"baseName": "l",
"type": "number",
"format": "int64"
} ];
static getAttributeTypeMap() {
return Base.attributeTypeMap;
}
public constructor() {
this.type = "Base";
}
}
export class B {
'i': number;
'type'?: string;
static readonly discriminator: string | undefined = "type";
static readonly attributeTypeMap: Array<{name: string, baseName: string, type: string, format: string}> = [
{
"name": "i",
"baseName": "i",
"type": "number",
"format": "int32"
},
{
"name": "type",
"baseName": "type",
"type": "string",
"format": "string"
} ];
static getAttributeTypeMap() {
return B.attributeTypeMap;
}
public constructor() {
this.type = "B";
}
}
Wicpar commented
PR Accepted
Wicpar commented
Yes I'm waiting for another pr though