You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:22:06