如何使用typescript-generator生成对应Java枚举字段值的TS枚举
解决typescript-generator生成TS枚举值映射Java枚举text字段的问题
核心思路
typescript-generator默认用Java枚举的名称作为TS枚举的值,要替换成text字段的值,需要自定义枚举类型转换器(EnumTypeConverter),通过扩展默认转换器读取枚举的text属性值。
具体实现步骤
1. 自定义EnumTypeConverter类
创建Java类继承com.github.konradcz2001.typescript.generator.type.enumeration.EnumTypeConverter,重写方法读取枚举项的text字段:
import com.github.konradcz2001.typescript.generator.type.enumeration.EnumTypeConverter; import com.github.konradcz2001.typescript.generator.type.enumeration.EnumConstant; import java.lang.reflect.Field; public class TextFieldEnumConverter extends EnumTypeConverter { @Override public String convertEnumConstant(EnumConstant constant) { try { // 获取枚举项的text字段值 Field textField = constant.getEnumConstant().getDeclaringClass().getField("text"); String textValue = (String) textField.get(constant.getEnumConstant()); // 返回带引号的text值,符合TS枚举格式 return "\"" + textValue + "\""; } catch (NoSuchFieldException | IllegalAccessException e) { // 无text字段时,降级使用默认枚举名称 return super.convertEnumConstant(constant); } } }
2. 在Maven插件中配置自定义转换器
修改pom.xml里的typescript-generator插件配置,指定自定义转换器:
<plugin> <groupId>com.github.konradcz2001</groupId> <artifactId>typescript-generator-maven-plugin</artifactId> <version>你的插件版本</version> <executions> <execution> <id>generate-ts-enums</id> <goals> <goal>generate</goal> </goals> <configuration> <!-- 保留原有配置 --> <enumTypeConverter>com.yourpackage.TextFieldEnumConverter</enumTypeConverter> </configuration> </execution> </executions> </plugin>
3. 验证生成结果
假设Java枚举为:
public enum DefinedFields { USER_NAME("username"), EMAIL("user_email"), PHONE("contact_phone"); public final String text; DefinedFields(String text) { this.text = text; } }
生成的TS枚举会变为:
export enum DefinedFields { USER_NAME = "username", EMAIL = "user_email", PHONE = "contact_phone" }
注意事项
- 确保自定义转换器类在Maven构建的classpath中,可放在项目
src/main/java目录下。 - 若部分枚举无
text字段,转换器会自动降级使用枚举名称,保证兼容性。
内容的提问来源于stack exchange,提问作者Henriette Harmse
相关产品推荐
相关产品推荐

