如何在JavaScript中根据枚举自动声明关联类型?
实现方案
你可以借助TypeScript的映射类型和模板字面量类型实现需求,修改Animals枚举时MyType会自动同步更新,具体代码如下:
// 原枚举定义 enum Animals { CAT = 'cat', DOG = 'dog', } // 定义需要的属性后缀联合类型 type AnimalPropsSuffix = '_price' | '_from' | '_color'; // 基于枚举动态生成目标类型 type MyType = { [K in `${Animals}${AnimalPropsSuffix}`]: string; };
代码说明
${Animals}${AnimalPropsSuffix}是模板字面量类型,会把Animals的每个成员值和每个后缀拼接,生成所有需要的属性名(比如cat_price、dog_from等)- 映射类型
[K in ...]会遍历所有拼接出来的属性名,统一指定属性类型为string
当你修改Animals枚举时(比如新增PIG = 'pig'),MyType会自动新增pig_price、pig_from、pig_color这三个属性,完全同步枚举的变化。
内容的提问来源于stack exchange,提问作者Bikas Lin
相关产品推荐
相关产品推荐

