You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据UserRoles枚举值设置allowedPermissions属性的必填/可选性?

解决方案

要实现这种依赖角色的属性必填规则,你可以用TypeScript的联合类型拆分不同角色对应的属性约束,具体实现如下:

首先定义基础枚举类型(如果还没定义):

// 用户角色枚举
enum UserRoles {
  SUPERADMIN = 'SUPERADMIN',
  ADMIN = 'ADMIN',
  AGENT = 'AGENT'
}

// 权限枚举(示例,可根据实际需求调整)
enum UserPermissions {
  VIEW = 'VIEW',
  EDIT = 'EDIT',
  DELETE = 'DELETE'
}

接下来定义IRequireUserPermits联合类型,拆分两种场景:

type IRequireUserPermits = 
  // 角色为SUPERADMIN/ADMIN时,allowedPermissions可选
  | {
      minimalRequiredRole: UserRoles.SUPERADMIN | UserRoles.ADMIN;
      allowedPermissions?: UserPermissions[];
    }
  // 角色为AGENT时,allowedPermissions必须填写
  | {
      minimalRequiredRole: UserRoles.AGENT;
      allowedPermissions: UserPermissions[];
    };

补充:含共同属性的优化写法

如果接口还有所有角色通用的属性,可以把公共部分抽出来,用交叉类型合并,让代码更简洁:

// 公共属性示例
type BasePermitProps = {
  componentId: string;
  desc?: string;
};

type IRequireUserPermits = 
  | (BasePermitProps & {
      minimalRequiredRole: UserRoles.SUPERADMIN | UserRoles.ADMIN;
      allowedPermissions?: UserPermissions[];
    })
  | (BasePermitProps & {
      minimalRequiredRole: UserRoles.AGENT;
      allowedPermissions: UserPermissions[];
    });

这样定义后,TypeScript会自动做校验:

  • 当minimalRequiredRole设为UserRoles.AGENT时,编辑器会强制要求传入allowedPermissions;
  • 角色为另外两个值时,allowedPermissions可省略,也可按需传入。

内容的提问来源于stack exchange,提问作者mmozedev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:04:56