当前位置: 首页 > 知识库问答 >
问题:

javascript - 问一个ts的问题,怎么通过两个枚举合并生成另外一个枚举?

方飞翼
2023-08-18

权限码时有模块枚举和权限枚举共同组成的,比如:

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的类型定义呢

共有2个答案

卢晟
2023-08-18
type PermModuleCodeEnum = 'enterpriseTenant' | 'enterpriseIncoming' | 'enterpriseIncoming1';type PremCode = 'Add' | 'Disable' | 'Edit';type PermissionCode<M extends string, P extends string> = `${M}:${P}`;function createPerCodes<M extends string, P extends string>(  permissions: P[],  module: M): { [K in P]: PermissionCode<M, K> } {  return permissions.reduce((pre, cur) => ({ ...pre, [cur]: `${module}:${cur}` }), {} as { [K in P]: PermissionCode<M, K> });}const perCodes = createPerCodes(['Add', 'Disable', 'Edit'], 'enterpriseTenant');

GPT回答的。没验证过。你试试

拓拔富
2023-08-18
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);
 类似资料:
  • 定义一个枚举,将其中一个取值作为replace方法的第二个参数,这时候会报错,该怎么处理?

  • 问题内容: 我想分享一些枚举属性。就像是: 我知道了为什么不能继承(因为状态在中没有表示形式),但是我仍然想说“ ActionState就像具有更多选项的State,并且ActionState可以获取类型为State的输入,因为它们也属于输入ActionState” 我知道如何获得上述逻辑来复制案例并在函数中进行切换。但我正在寻找更好的方法。 我知道枚举不能在Swift中继承,并且我已经阅读了sw

  • 枚举具有名为'hash value'的属性,该属性是枚举内的索引。

  • 我有两个枚举,它们实现了如下相同的接口:- 名为SystemA和SystemB的两个枚举正在实现此接口。 我想要像这样应用getConfigFunction:- 但它会抛出编译时错误,因为形成的流的类型为:Config[]。所以我尝试了以下修改:- 但这也失败了,因为我还需要修改forEach部分。有人能帮忙吗?我该如何修改forEach部分,或者我该如何使用map()/flatmap()函数,这

  • 我有以下Groovy脚本作为Jenkins管道的一部分 权限。棒极了 作为Jenkins管道的一部分,我将这个文件加载到另一个Groovy文件中,并调用get_job_permissions作为参数通过其中一个枚举。 pipeline.groovy Jenkins在这方面失败,并出现以下错误(我已经验证了在本例中'Script3'是使用enum参数获取_job_权限的调用)。 我知道脚本加载和调用

  • 这是哲学家进餐问题的另一个实现,这是家庭作业问题,我将在这里展示我迄今为止所做的尝试: 大部分的代码是准备好的,除了和方法需要改变,我所做的就是添加这个: 和 我知道这不是线程安全的,这个链接也保证了这一点。真正的神话是老师希望我们使用lock来解决这个问题,我可以在和中锁定/解锁互斥锁,锁定和解锁两个锁(choppestick[philosopherNumber].lock();和筷子[(哲学家