如何扩展TypeScript枚举类型,新增带_2后缀的字段类型?
解决方案:扩展枚举类型以包含带后缀的字段
嘿,这个需求用TypeScript的映射类型结合模板字面量类型就能轻松搞定!咱们一步步来实现:
首先先回顾你的原枚举和已完成的基础类型:
export enum Test { A = 'A', B = 'B', C = 'C' } // 你已实现的包含原枚举字段的类型 type TestOriginal = { [p in keyof typeof Test]: string };
方法1:合并原类型与后缀字段类型
我们可以先单独生成带_2后缀的字段类型,再和原类型合并:
// 生成所有带_2后缀的字段类型 type TestWithSuffix = { [p in keyof typeof Test as `${p}_2`]: string }; // 合并两个类型,得到最终的扩展类型 type TestExtended = TestOriginal & TestWithSuffix;
方法2:更简洁的单映射实现
其实可以一步到位,直接在映射类型里同时声明原字段和后缀字段:
type TestExtended = { [p in keyof typeof Test | `${keyof typeof Test}_2`]: string; };
原理说明
keyof typeof Test会提取枚举的键类型,也就是'A' | 'B' | 'C'- 模板字面量类型
${keyof typeof Test}_2会自动给每个枚举键拼接_2,生成'A_2' | 'B_2' | 'C_2' - 把这两个联合类型作为映射的键,就能一次性包含所有需要的字段了
使用示例
现在你可以定义完全符合要求的对象:
const validObj: TestExtended = { A: 'valueA', B: 'valueB', C: 'valueC', A_2: 'valueA2', B_2: 'valueB2', C_2: 'valueC2' };
内容的提问来源于stack exchange,提问作者user3409988
相关产品推荐
相关产品推荐

