diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java index 159b2763ed6..4b0dcc7809c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java @@ -546,14 +546,14 @@ public class TypeScriptClientCodegen extends DefaultCodegen implements CodegenCo // name enum with model name, e.g. StatusEnum => Pet.StatusEnum for (CodegenProperty var : cm.vars) { if (Boolean.TRUE.equals(var.isEnum)) { - var.datatypeWithEnum = var.datatypeWithEnum.replace(var.enumName, cm.classname + "." + var.enumName); + var.datatypeWithEnum = var.datatypeWithEnum.replace(var.enumName, cm.classname + var.enumName); } } if (cm.parent != null) { for (CodegenProperty var : cm.allVars) { if (Boolean.TRUE.equals(var.isEnum)) { var.datatypeWithEnum = var.datatypeWithEnum - .replace(var.enumName, cm.classname + "." + var.enumName); + .replace(var.enumName, cm.classname + var.enumName); } } } diff --git a/modules/openapi-generator/src/main/resources/typescript/model/ObjectSerializer.mustache b/modules/openapi-generator/src/main/resources/typescript/model/ObjectSerializer.mustache index 842c4a89691..4655727b189 100644 --- a/modules/openapi-generator/src/main/resources/typescript/model/ObjectSerializer.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/model/ObjectSerializer.mustache @@ -6,7 +6,7 @@ export * from './{{{ classFilename }}}'; {{#models}} {{#model}} -import { {{classname}} } from './{{{ classFilename }}}'; +import { {{classname}}{{#hasEnums}}{{#vars}}{{#isEnum}}, {{classname}}{{enumName}} {{/isEnum}} {{/vars}}{{/hasEnums}} } from './{{{ classFilename }}}'; {{/model}} {{/models}} @@ -22,19 +22,19 @@ let primitives = [ "any" ]; -let enumsMap: {[index: string]: any} = { +let enumsMap: Set = new Set([ {{#models}} {{#model}} {{#hasEnums}} {{#vars}} {{#isEnum}} - {{#isContainer}}"{{classname}}.{{enumName}}": {{classname}}.{{enumName}}{{/isContainer}}{{#isNotContainer}}"{{datatypeWithEnum}}": {{datatypeWithEnum}}{{/isNotContainer}}, + "{{classname}}{{enumName}}", {{/isEnum}} {{/vars}} {{/hasEnums}} {{/model}} {{/models}} -} +]); let typeMap: {[index: string]: any} = { {{#models}} @@ -53,7 +53,7 @@ export class ObjectSerializer { } else if (expectedType === "Date") { return expectedType; } else { - if (enumsMap[expectedType]) { + if (enumsMap.has(expectedType)) { return expectedType; } @@ -97,7 +97,7 @@ export class ObjectSerializer { } else if (type === "Date") { return data.toISOString(); } else { - if (enumsMap[type]) { + if (enumsMap.has(type)) { return data; } if (!typeMap[type]) { // in case we dont know the type @@ -137,7 +137,7 @@ export class ObjectSerializer { } else if (type === "Date") { return new Date(data); } else { - if (enumsMap[type]) {// is Enum + if (enumsMap.has(type)) {// is Enum return data; } diff --git a/modules/openapi-generator/src/main/resources/typescript/model/model.mustache b/modules/openapi-generator/src/main/resources/typescript/model/model.mustache index 0b3ca758916..b94d89990f9 100644 --- a/modules/openapi-generator/src/main/resources/typescript/model/model.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/model/model.mustache @@ -51,19 +51,13 @@ export class {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{ } {{#hasEnums}} -export namespace {{classname}} { + {{#vars}} {{#isEnum}} - export enum {{enumName}} { - {{#allowableValues}} - {{#enumVars}} - {{name}} = {{{value}}}{{^-last}},{{/-last}} - {{/enumVars}} - {{/allowableValues}} - } +export type {{classname}}{{enumName}} ={{#allowableValues}}{{#values}} "{{.}}" {{^-last}}|{{/-last}}{{/values}}{{/allowableValues}}; {{/isEnum}} {{/vars}} -} + {{/hasEnums}} {{/model}} {{/models}} \ No newline at end of file diff --git a/samples/client/petstore/typescript/builds/default/PromiseAPI.ts b/samples/client/petstore/typescript/builds/default/PromiseAPI.ts index 2b89bbc5fd7..48f63d417e6 100644 --- a/samples/client/petstore/typescript/builds/default/PromiseAPI.ts +++ b/samples/client/petstore/typescript/builds/default/PromiseAPI.ts @@ -19,7 +19,7 @@ export class PetApi { this.responseProcessor = new PetApiResponseProcessor(); } - public addPet(pet: Pet, options?: any): Promise { + public addPet(pet: Pet, options?: Configuration): Promise { const requestContext = this.requestFactory.addPet(pet, options); // build promise chain @@ -38,7 +38,7 @@ export class PetApi { }); } - public deletePet(petId: number, apiKey?: string, options?: any): Promise { + public deletePet(petId: number, apiKey?: string, options?: Configuration): Promise { const requestContext = this.requestFactory.deletePet(petId, apiKey, options); // build promise chain @@ -57,7 +57,7 @@ export class PetApi { }); } - public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: any): Promise> { + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Promise> { const requestContext = this.requestFactory.findPetsByStatus(status, options); // build promise chain @@ -76,7 +76,7 @@ export class PetApi { }); } - public findPetsByTags(tags: Array, options?: any): Promise> { + public findPetsByTags(tags: Array, options?: Configuration): Promise> { const requestContext = this.requestFactory.findPetsByTags(tags, options); // build promise chain @@ -95,7 +95,7 @@ export class PetApi { }); } - public getPetById(petId: number, options?: any): Promise { + public getPetById(petId: number, options?: Configuration): Promise { const requestContext = this.requestFactory.getPetById(petId, options); // build promise chain @@ -114,7 +114,7 @@ export class PetApi { }); } - public updatePet(pet: Pet, options?: any): Promise { + public updatePet(pet: Pet, options?: Configuration): Promise { const requestContext = this.requestFactory.updatePet(pet, options); // build promise chain @@ -133,7 +133,7 @@ export class PetApi { }); } - public updatePetWithForm(petId: number, name?: string, status?: string, options?: any): Promise { + public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Promise { const requestContext = this.requestFactory.updatePetWithForm(petId, name, status, options); // build promise chain @@ -152,7 +152,7 @@ export class PetApi { }); } - public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: any): Promise { + public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Promise { const requestContext = this.requestFactory.uploadFile(petId, additionalMetadata, file, options); // build promise chain @@ -187,7 +187,7 @@ export class StoreApi { this.responseProcessor = new StoreApiResponseProcessor(); } - public deleteOrder(orderId: string, options?: any): Promise { + public deleteOrder(orderId: string, options?: Configuration): Promise { const requestContext = this.requestFactory.deleteOrder(orderId, options); // build promise chain @@ -206,7 +206,7 @@ export class StoreApi { }); } - public getInventory(options?: any): Promise<{ [key: string]: number; }> { + public getInventory(options?: Configuration): Promise<{ [key: string]: number; }> { const requestContext = this.requestFactory.getInventory(options); // build promise chain @@ -225,7 +225,7 @@ export class StoreApi { }); } - public getOrderById(orderId: number, options?: any): Promise { + public getOrderById(orderId: number, options?: Configuration): Promise { const requestContext = this.requestFactory.getOrderById(orderId, options); // build promise chain @@ -244,7 +244,7 @@ export class StoreApi { }); } - public placeOrder(order: Order, options?: any): Promise { + public placeOrder(order: Order, options?: Configuration): Promise { const requestContext = this.requestFactory.placeOrder(order, options); // build promise chain @@ -279,7 +279,7 @@ export class UserApi { this.responseProcessor = new UserApiResponseProcessor(); } - public createUser(user: User, options?: any): Promise { + public createUser(user: User, options?: Configuration): Promise { const requestContext = this.requestFactory.createUser(user, options); // build promise chain @@ -298,7 +298,7 @@ export class UserApi { }); } - public createUsersWithArrayInput(user: Array, options?: any): Promise { + public createUsersWithArrayInput(user: Array, options?: Configuration): Promise { const requestContext = this.requestFactory.createUsersWithArrayInput(user, options); // build promise chain @@ -317,7 +317,7 @@ export class UserApi { }); } - public createUsersWithListInput(user: Array, options?: any): Promise { + public createUsersWithListInput(user: Array, options?: Configuration): Promise { const requestContext = this.requestFactory.createUsersWithListInput(user, options); // build promise chain @@ -336,7 +336,7 @@ export class UserApi { }); } - public deleteUser(username: string, options?: any): Promise { + public deleteUser(username: string, options?: Configuration): Promise { const requestContext = this.requestFactory.deleteUser(username, options); // build promise chain @@ -355,7 +355,7 @@ export class UserApi { }); } - public getUserByName(username: string, options?: any): Promise { + public getUserByName(username: string, options?: Configuration): Promise { const requestContext = this.requestFactory.getUserByName(username, options); // build promise chain @@ -374,7 +374,7 @@ export class UserApi { }); } - public loginUser(username: string, password: string, options?: any): Promise { + public loginUser(username: string, password: string, options?: Configuration): Promise { const requestContext = this.requestFactory.loginUser(username, password, options); // build promise chain @@ -393,7 +393,7 @@ export class UserApi { }); } - public logoutUser(options?: any): Promise { + public logoutUser(options?: Configuration): Promise { const requestContext = this.requestFactory.logoutUser(options); // build promise chain @@ -412,7 +412,7 @@ export class UserApi { }); } - public updateUser(username: string, user: User, options?: any): Promise { + public updateUser(username: string, user: User, options?: Configuration): Promise { const requestContext = this.requestFactory.updateUser(username, user, options); // build promise chain diff --git a/samples/client/petstore/typescript/builds/default/models/ObjectSerializer.ts b/samples/client/petstore/typescript/builds/default/models/ObjectSerializer.ts index f1ef2d30044..6e0c08a9baf 100644 --- a/samples/client/petstore/typescript/builds/default/models/ObjectSerializer.ts +++ b/samples/client/petstore/typescript/builds/default/models/ObjectSerializer.ts @@ -7,8 +7,8 @@ export * from './User'; import { ApiResponse } from './ApiResponse'; import { Category } from './Category'; -import { Order } from './Order'; -import { Pet } from './Pet'; +import { Order , OrderStatusEnum } from './Order'; +import { Pet , PetStatusEnum } from './Pet'; import { Tag } from './Tag'; import { User } from './User'; @@ -24,10 +24,10 @@ let primitives = [ "any" ]; -let enumsMap: {[index: string]: any} = { - "Order.StatusEnum": Order.StatusEnum, - "Pet.StatusEnum": Pet.StatusEnum, -} +let enumsMap: Set = new Set([ + "OrderStatusEnum", + "PetStatusEnum", +]); let typeMap: {[index: string]: any} = { "ApiResponse": ApiResponse, @@ -47,7 +47,7 @@ export class ObjectSerializer { } else if (expectedType === "Date") { return expectedType; } else { - if (enumsMap[expectedType]) { + if (enumsMap.has(expectedType)) { return expectedType; } @@ -91,7 +91,7 @@ export class ObjectSerializer { } else if (type === "Date") { return data.toISOString(); } else { - if (enumsMap[type]) { + if (enumsMap.has(type)) { return data; } if (!typeMap[type]) { // in case we dont know the type @@ -131,7 +131,7 @@ export class ObjectSerializer { } else if (type === "Date") { return new Date(data); } else { - if (enumsMap[type]) {// is Enum + if (enumsMap.has(type)) {// is Enum return data; } diff --git a/samples/client/petstore/typescript/builds/default/models/Order.ts b/samples/client/petstore/typescript/builds/default/models/Order.ts index 8527b6f208f..f08f21cf4b7 100644 --- a/samples/client/petstore/typescript/builds/default/models/Order.ts +++ b/samples/client/petstore/typescript/builds/default/models/Order.ts @@ -13,7 +13,7 @@ export class Order { /** * Order Status */ - 'status'?: Order.StatusEnum; + 'status'?: OrderStatusEnum; 'complete'?: boolean; static discriminator: string | undefined = undefined; @@ -42,7 +42,7 @@ export class Order { { "name": "status", "baseName": "status", - "type": "Order.StatusEnum" + "type": "OrderStatusEnum" }, { "name": "complete", @@ -55,10 +55,6 @@ export class Order { } } -export namespace Order { - export enum StatusEnum { - Placed = 'placed', - Approved = 'approved', - Delivered = 'delivered' - } -} + +export type OrderStatusEnum = "placed" | "approved" | "delivered" ; + diff --git a/samples/client/petstore/typescript/builds/default/models/Pet.ts b/samples/client/petstore/typescript/builds/default/models/Pet.ts index cc4e4d7d1a3..a2b7d1691ec 100644 --- a/samples/client/petstore/typescript/builds/default/models/Pet.ts +++ b/samples/client/petstore/typescript/builds/default/models/Pet.ts @@ -16,7 +16,7 @@ export class Pet { /** * pet status in the store */ - 'status'?: Pet.StatusEnum; + 'status'?: PetStatusEnum; static discriminator: string | undefined = undefined; @@ -49,7 +49,7 @@ export class Pet { { "name": "status", "baseName": "status", - "type": "Pet.StatusEnum" + "type": "PetStatusEnum" } ]; static getAttributeTypeMap() { @@ -57,10 +57,6 @@ export class Pet { } } -export namespace Pet { - export enum StatusEnum { - Available = 'available', - Pending = 'pending', - Sold = 'sold' - } -} + +export type PetStatusEnum = "available" | "pending" | "sold" ; + diff --git a/samples/client/petstore/typescript/tests/default/test/api/PetApi.test.ts b/samples/client/petstore/typescript/tests/default/test/api/PetApi.test.ts index 012dabaf4ef..53bdb215ea3 100644 --- a/samples/client/petstore/typescript/tests/default/test/api/PetApi.test.ts +++ b/samples/client/petstore/typescript/tests/default/test/api/PetApi.test.ts @@ -13,7 +13,7 @@ const pet = new Pet() pet.id = Math.floor(Math.random() * 100000) pet.name = "PetName" pet.photoUrls = [] -pet.status = Pet.StatusEnum.Available +pet.status = 'available' pet.tags = [ tag ] pet.category = undefined diff --git a/samples/client/petstore/typescript/tests/default/test/models/ObjectSerializer.test.ts b/samples/client/petstore/typescript/tests/default/test/models/ObjectSerializer.test.ts index 342ea63b26c..a6cb1bcc994 100644 --- a/samples/client/petstore/typescript/tests/default/test/models/ObjectSerializer.test.ts +++ b/samples/client/petstore/typescript/tests/default/test/models/ObjectSerializer.test.ts @@ -48,7 +48,7 @@ describe("ObjectSerializer", () => { }); it ("Enum", () => { - const input = Pet.StatusEnum.Available + const input = "available" expect(ObjectSerializer.serialize(input, "Pet.StatusEnum")).to.equal("available") }) @@ -74,7 +74,7 @@ describe("ObjectSerializer", () => { pet.category = category pet.name = "PetName" pet.photoUrls = [ "url", "other url"] - pet.status = Pet.StatusEnum.Available + pet.status = "available" pet.tags = tags expect(ObjectSerializer.serialize(pet, "Pet")).to.deep.equal({ @@ -149,7 +149,7 @@ describe("ObjectSerializer", () => { }); it ("Enum", () => { - const input = Pet.StatusEnum.Available + const input = "available" expect(ObjectSerializer.deserialize("available", "Pet.StatusEnum")).to.equal(input) }) @@ -175,7 +175,7 @@ describe("ObjectSerializer", () => { pet.category = category pet.name = "PetName" pet.photoUrls = [ "url", "other url"] - pet.status = Pet.StatusEnum.Available + pet.status = "available" pet.tags = tags const deserialized = ObjectSerializer.deserialize({