为何JHipster JDL生成的Angular/TypeScript枚举未显式赋值?
JHipster JDL枚举生成导致Switch语句失效的问题解决
我之前也碰到过一模一样的问题,这大概率是JHipster JDL生成器的默认行为问题,而非你的理解偏差。
问题根源
当你在JDL里定义:
enum PricingModel { AVAILABILITY, DEADLINES, PAYMENTS }
JHipster默认生成的TypeScript代码是隐式数字赋值的const枚举:
export const enum PricingModel { 'AVAILABILITY', 'DEADLINES', 'PAYMENTS' }
虽然成员写的是字符串字面量,但TypeScript会自动把它们编译成0、1、2这类数字值。当你在switch语句里用字符串(比如从后端API返回的枚举字符串值)去匹配时,自然就匹配不上了,导致逻辑失效。
正确的枚举形式
按照TypeScript 2.4+的规范,应该生成带显式字符串赋值的const枚举,这样每个成员的值就是对应的字符串本身:
export const enum PricingModel { AVAILABILITY = 'AVAILABILITY', DEADLINES = 'DEADLINES', PAYMENTS = 'PAYMENTS' }
这种形式下,switch语句用字符串值匹配枚举成员就能正常工作了。
解决办法
你可以尝试这几种方式来修正:
- 检查项目根目录的
.yo-rc.json配置文件,看看有没有控制枚举生成类型的配置项,开启字符串赋值模式 - 如果没有现成配置,可以自定义JHipster的前端枚举生成模板,修改生成逻辑来输出带显式字符串赋值的枚举
- 临时方案:手动修改生成后的TypeScript枚举文件,但注意每次重新执行JDL生成命令时,这个文件会被覆盖,适合临时测试用
内容的提问来源于stack exchange,提问作者Lance
相关产品推荐
相关产品推荐

