@@ -779,7 +779,10 @@ void PrintProtoDtsEnum(Printer* printer, const EnumDescriptor* desc) {
779
779
std::map<string, string> vars;
780
780
vars[" enum_name" ] = desc->name ();
781
781
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 " );
783
786
printer->Indent ();
784
787
for (int i = 0 ; i < desc->value_count (); i++) {
785
788
vars[" value_name" ] = Uppercase (desc->value (i)->name ());
@@ -795,7 +798,9 @@ void PrintProtoDtsOneofCase(Printer* printer, const OneofDescriptor* desc) {
795
798
vars[" oneof_name" ] = ToUpperCamel (ParseLowerUnderscore (desc->name ()));
796
799
vars[" oneof_name_upper" ] = Uppercase (desc->name ());
797
800
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 " );
799
804
printer->Indent ();
800
805
printer->Print (vars, " $oneof_name_upper$_NOT_SET = 0,\n " );
801
806
for (int i = 0 ; i < desc->field_count (); i++) {
0 commit comments