问一个ts的问题,怎么通过两个枚举合并生成另外一个枚举?
权限码时有模块枚举和权限枚举共同组成的,比如:
enum PermModuleCodeEnum {
EnterpriseTenant = 'enterpriseTenant',
EnterpriseIncoming = 'enterpriseIncoming',
EnterpriseIncoming1 = 'enterpriseIncoming1',
}
type PremCode = 'Add' | 'Disable' | 'Edit'
function createPerCodes<T extends string>(union: T[], module: PermModuleCodeEnum): { [K in T]: `${PermModuleCodeEnum}:${K}` } {
return union.reduce((pre, cur) => ({ ...pre, [cur]: `${module}:${cur}` }), {} as { [K in T]: `${PermModuleCodeEnum}:${K}` });
}
const perCodes = createPerCodes<PremCode>(['Add', 'Disable', 'Edit'], PermModuleCodeEnum.EnterpriseTenant);
console.log('xxx-1', perCodes);
此时此时的 perCodes为 {
Add: "enterpriseTenant:Add" | "enterpriseIncoming:Add" | "enterpriseIncoming1:Add";
Disable: "enterpriseTenant:Disable" | "enterpriseIncoming:Disable" | "enterpriseIncoming1:Disable";
Edit: "enterpriseTenant:Edit" | "enterpriseIncoming" | "enterpriseIncoming1:Edit";
}
而不是
{
Add: "enterpriseTenant:Add";
Disable: "enterpriseTenant:Disable";
Edit: "enterpriseTenant:Edit";
}
怎样才能修复createPerCodes的类型定义呢
回复
1个回答
test
2024-06-28
enum PermModuleCodeEnum {
EnterpriseTenant = 'enterpriseTenant',
EnterpriseIncoming = 'enterpriseIncoming',
EnterpriseIncoming1 = 'enterpriseIncoming1',
}
type PremCode = 'Add' | 'Disable' | 'Edit';
function createPerCodes<T extends string, M extends PermModuleCodeEnum>(union: T[], module: M): { [K in T]: `${M}:${K}` } {
return union.reduce((pre, cur) => ({ ...pre, [cur]: `${module}:${cur}` }), {} as { [K in T]: `${M}:${K}` });
}
const perCodes = createPerCodes<PremCode, typeof PermModuleCodeEnum.EnterpriseTenant>(['Add', 'Disable', 'Edit'], PermModuleCodeEnum.EnterpriseTenant);
console.log('xxx-1', perCodes);
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容