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

如何根据运行时确定的国家名称动态选择对应Enum?

如何根据运行时的国家名称动态选择对应Enum?

我定义了三个枚举:Country_INDIA、Country_USA、Country_AUSTRALIA。国家名称会在运行时确定(取值为INDIA、USA或AUSTRALIA中的一个),请问能否根据该国家名称在运行时选择对应的Enum?例如,当国家名称为USA时,选取Country_USA Enum。

用户提供的代码示例:

enum Country_INDIA {
  INTREST_RATE = '10%',
  MIN_INVESTMENT_DURATION = "5YRS"
};

enum Country_USA {
  INTREST_RATE = '3%',
  MIN_INVESTMENT_DURATION = "3YRS"
};

enum Country_AUSTRALIA {
  INTREST_RATE = '5%',
  MIN_INVESTMENT_DURATION = "2YRS"
};

let country_enum = "Country_"+"USA" 

console.log(country_enum.INTREST_RATE); // 期望获取Country_USA的利率

首先说明:你当前的写法只是生成了字符串,无法直接访问枚举成员。要实现运行时动态选择枚举,有几种实用方案:

方案1:用映射对象管理枚举

把所有国家枚举存入一个对象,通过动态生成的键名来获取对应枚举,这是类型安全且推荐的方式:

enum Country_INDIA {
  INTREST_RATE = '10%',
  MIN_INVESTMENT_DURATION = "5YRS"
};

enum Country_USA {
  INTREST_RATE = '3%',
  MIN_INVESTMENT_DURATION = "3YRS"
};

enum Country_AUSTRALIA {
  INTREST_RATE = '5%',
  MIN_INVESTMENT_DURATION = "2YRS"
};

// 创建枚举映射表
const countryEnumMap = {
  Country_INDIA,
  Country_USA,
  Country_AUSTRALIA
};

// 运行时获取的国家名称
const runtimeCountryName = "USA";
// 类型断言确保键名合法
const targetEnum = countryEnumMap[`Country_${runtimeCountryName}` as keyof typeof countryEnumMap];

console.log(targetEnum.INTREST_RATE); // 输出3%

方案2:通过全局对象访问(不推荐)

如果是在浏览器环境,可以借助window对象访问全局作用域的枚举,但这种方式会污染全局,且类型不安全:

// 将枚举挂载到全局(模块环境下需要显式赋值)
(window as any).Country_INDIA = Country_INDIA;
(window as any).Country_USA = Country_USA;
(window as any).Country_AUSTRALIA = Country_AUSTRALIA;

const runtimeCountryName = "USA";
const targetEnum = (window as any)[`Country_${runtimeCountryName}`];
console.log(targetEnum.INTREST_RATE); // 输出3%

方案3:重构配置结构(最优)

其实没必要定义多个枚举,把所有国家配置整合到一个对象中,结构更简洁,维护性更好:

// 定义国家枚举统一标识
enum CountryCode {
  INDIA = "INDIA",
  USA = "USA",
  AUSTRALIA = "AUSTRALIA"
}

// 存储所有国家的配置
const countryConfigs = {
  [CountryCode.INDIA]: {
    INTREST_RATE: '10%',
    MIN_INVESTMENT_DURATION: "5YRS"
  },
  [CountryCode.USA]: {
    INTREST_RATE: '3%',
    MIN_INVESTMENT_DURATION: "3YRS"
  },
  [CountryCode.AUSTRALIA]: {
    INTREST_RATE: '5%',
    MIN_INVESTMENT_DURATION: "2YRS"
  }
};

// 运行时确定的国家
const selectedCountry = CountryCode.USA;
const config = countryConfigs[selectedCountry];
console.log(config.INTREST_RATE); // 输出3%

这种方式不仅能实现需求,还能获得完整的TypeScript类型检查,避免潜在错误。


内容的提问来源于stack exchange,提问作者user3083590

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 19:32:59