@@ -779,7 +779,10 @@ void PrintProtoDtsEnum(Printer* printer, const EnumDescriptor* desc) {
779779 std::map<string, string> vars;
780780 vars[" enum_name" ] = desc->name ();
781781
782- printer->Print (vars, " export const enum $enum_name$ {\n " );
782+ // Use regular enums for broad TypeScript compatibility. `const enum`
783+ // triggers TS2748 when `verbatimModuleSyntax` is enabled (default in
784+ // TypeScript 5.9+), so prefer `enum` here.
785+ printer->Print (vars, " export enum $enum_name$ {\n " );
783786 printer->Indent ();
784787 for (int i = 0 ; i < desc->value_count (); i++) {
785788 vars[" value_name" ] = Uppercase (desc->value (i)->name ());
@@ -795,7 +798,9 @@ void PrintProtoDtsOneofCase(Printer* printer, const OneofDescriptor* desc) {
795798 vars[" oneof_name" ] = ToUpperCamel (ParseLowerUnderscore (desc->name ()));
796799 vars[" oneof_name_upper" ] = Uppercase (desc->name ());
797800
798- printer->Print (vars, " export const enum $oneof_name$Case {\n " );
801+ // Oneof case enums also use regular enums to avoid ambient `const enum`
802+ // issues under `verbatimModuleSyntax`.
803+ printer->Print (vars, " export enum $oneof_name$Case {\n " );
799804 printer->Indent ();
800805 printer->Print (vars, " $oneof_name_upper$_NOT_SET = 0,\n " );
801806 for (int i = 0 ; i < desc->field_count (); i++) {
0 commit comments