diff --git a/integration/enums-as-literals-with-string-enums/enums-as-literals-with-string-enums.ts b/integration/enums-as-literals-with-string-enums/enums-as-literals-with-string-enums.ts index f39181458..3d72ca249 100644 --- a/integration/enums-as-literals-with-string-enums/enums-as-literals-with-string-enums.ts +++ b/integration/enums-as-literals-with-string-enums/enums-as-literals-with-string-enums.ts @@ -17,6 +17,14 @@ export const DividerData_DividerType = { export type DividerData_DividerType = typeof DividerData_DividerType[keyof typeof DividerData_DividerType]; +export namespace DividerData_DividerType { + export type DOUBLE = typeof DividerData_DividerType.DOUBLE; + export type SINGLE = typeof DividerData_DividerType.SINGLE; + export type DASHED = typeof DividerData_DividerType.DASHED; + export type DOTTED = typeof DividerData_DividerType.DOTTED; + export type UNRECOGNIZED = typeof DividerData_DividerType.UNRECOGNIZED; +} + export function dividerData_DividerTypeFromJSON(object: any): DividerData_DividerType { switch (object) { case 0: diff --git a/integration/enums-as-literals/enums-as-literals.ts b/integration/enums-as-literals/enums-as-literals.ts index 25ab5e740..54f80a823 100644 --- a/integration/enums-as-literals/enums-as-literals.ts +++ b/integration/enums-as-literals/enums-as-literals.ts @@ -11,6 +11,14 @@ export const DividerData_DividerType = { DOUBLE: 0, SINGLE: 1, DASHED: 2, DOTTED export type DividerData_DividerType = typeof DividerData_DividerType[keyof typeof DividerData_DividerType]; +export namespace DividerData_DividerType { + export type DOUBLE = typeof DividerData_DividerType.DOUBLE; + export type SINGLE = typeof DividerData_DividerType.SINGLE; + export type DASHED = typeof DividerData_DividerType.DASHED; + export type DOTTED = typeof DividerData_DividerType.DOTTED; + export type UNRECOGNIZED = typeof DividerData_DividerType.UNRECOGNIZED; +} + export function dividerData_DividerTypeFromJSON(object: any): DividerData_DividerType { switch (object) { case 0: diff --git a/src/enums.ts b/src/enums.ts index aa099f4d0..3e9721f43 100644 --- a/src/enums.ts +++ b/src/enums.ts @@ -52,6 +52,21 @@ export function generateEnum( chunks.push(code`} as const`); chunks.push(code`\n`); chunks.push(code`export type ${def(fullName)} = typeof ${def(fullName)}[keyof typeof ${def(fullName)}]`); + chunks.push(code`\n`); + chunks.push(code`export namespace ${def(fullName)} {`); + + enumDesc.value.forEach((valueDesc) => { + const memberName = getMemberName(ctx, enumDesc, valueDesc); + chunks.push(code`export type ${memberName} = typeof ${def(fullName)}.${memberName};`); + }); + + if (options.unrecognizedEnum && !unrecognizedEnum.present) { + chunks.push( + code`export type ${options.unrecognizedEnumName} = typeof ${def(fullName)}.${options.unrecognizedEnumName};`, + ); + } + + chunks.push(code`}`); } else { chunks.push(code`}`); }