如何更简洁地为TypeScript枚举扩展多组后缀字段?
简洁实现多后缀字段类型的方案
你可以通过定义后缀联合类型结合TypeScript的键重映射功能,一次性生成所有带指定后缀的字段类型,避免冗长的交叉类型拼接:
实现代码
export enum Test { A = 'A', B = 'B', C = 'C' } // 定义需要的后缀联合类型 type Suffix = '2' | '3' | '4'; // 一次性生成所有组合字段 type TestExtended = { [P in keyof typeof Test as `${P}_${Suffix}`]: string; };
原理说明
- 先通过
Suffix联合类型集中管理所有需要的后缀,后续添加/删除后缀只需修改这个类型即可; - 在映射类型的键重映射部分(
as${P}_${Suffix}``),TypeScript会自动遍历枚举键与后缀的所有组合,生成对应的字段名; - 最终生成的
TestExtended类型与你之前用交叉类型拼接的结果完全一致,但代码结构更简洁、扩展性更强。
进阶:动态生成数字范围后缀
如果需要的后缀是连续数字(比如从2到10),可以用递归类型生成数字范围的联合,再转成字符串后缀:
// 生成指定范围的数字联合类型 type NumberRange<Start extends number, End extends number, R extends number[] = []> = R['length'] extends End ? R[number] : NumberRange<Start, End, [...R, R['length'] >= Start ? R['length'] : never]>; // 生成2-4的字符串后缀 type Suffix = `${NumberRange<2, 4>}`; type TestExtended = { [P in keyof typeof Test as `${P}_${Suffix}`]: string; };
内容的提问来源于stack exchange,提问作者user3409988
相关产品推荐
相关产品推荐

