Skip to content

Commit d951430

Browse files
authored
Update TypeScript enum generation to use regular enums for compatibility with TypeScript 5.9+ (#1507)
1 parent 755798a commit d951430

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

javascript/net/grpc/web/generator/grpc_generator.cc

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)