如何根据运行时确定的国家名称动态选择对应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
相关产品推荐
相关产品推荐

