首页 > 其他分享 >ts 枚举的位运算

ts 枚举的位运算

时间:2024-02-26 19:00:38浏览次数:21  
标签:运算 Permission ts 枚举 按位 权限 Permissions

枚举的位运算

在枚举中,可以使用位运算符来对枚举值进行位运算操作。位运算是一种对二进制数进行操作的方式,它可以对枚举值的各个位进行逻辑运算,从而实现一些特定的功能。
以下是常用的位运算符及其功能:

  1. 按位与(&):将两个操作数的每个对应位进行与运算,结果中每个位都是两个操作数对应位上都为1时才为1,否则为0。
  2. 按位或(|):将两个操作数的每个对应位进行或运算,结果中每个位都是两个操作数对应位上至少有一个为1时才为1,否则为0。
  3. 按位异或(^):将两个操作数的每个对应位进行异或运算,结果中每个位都是两个操作数对应位上不相同时才为1,相同时为0。
  4. 按位取反(~):将操作数的每一位取反。
    下面是一个示例说明如何使用枚举和按位运算符来表示和处理权限:
enum Permission {
 Read = 1, // 0001
 Write = 2, // 0010
 Execute = 4, // 0100
 Delete = 8 // 1000
}
let userPermission: Permission = Permission.Read | Permission.Write; // 用户权限:读、写
function hasPermission(permission: Permission, checkPermission: Permission): boolean {
 return (permission & checkPermission) === checkPermission;
}
console.log(hasPermission(userPermission, Permission.Read)); // 输出: true
console.log(hasPermission(userPermission, Permission.Execute)); // 输出: false

在上面的示例中,我们定义了一个名为Permission的枚举,它表示不同的权限。
每个权限都使用二进制表示,其中每个位代表一种权限。

然后我们声明了一个变量 userPermission,并将其赋值为 Permission.Read | Permission.Write,表示用户具有读和写的权限。
接下来,我们定义了一个名为 hasPermission 的函数,它接受两个参数:permission 表示用户的权限,checkPermission 表示要检查的权限。

在函数内部,我们使用按位与运算符 & 来检查用户是否具有指定的权限。
如果结果等于要检查的权限,则返回 true;否则返回 false。

最后,我们通过调用 hasPermission 函数来检查用户是否具有读和执行的权限。
根据上面定义的 userPermission 的值,输出结果分别为 true 和 false。

通过使用枚举和位运算符,我们可以方便地对多个权限进行组合和判断。
这种方式可以简化代码,并提供更灵活和可扩展的权限控制机制。

在 TypeScript 中,枚举值可以用于进行位运算。通过将枚举成员的值定义为按位组合(bitwise combination)的数字,可以实现一组标志(flags)或标志位(bit flags)。这种做法常用于表示一组可选特性或多个状态。

例如,假设你有一个枚举类型来表示一些权限:

enum Permissions {
  Read = 1 << 0, // 二进制: 0001
  Write = 1 << 1, // 二进制: 0010
  Delete = 1 << 2, // 二进制: 0100
  Admin = 1 << 3, // 二进制: 1000
}

这样定义后,你可以用位运算符轻松地组合和检查这些权限:

let combinedPermissions: Permissions = Permissions.Read | Permissions.Write;

// 检查用户是否具有特定权限
if ((combinedPermissions & Permissions.Delete) === Permissions.Delete) {
  console.log('User has delete permission');
}

// 添加权限
combinedPermissions |= Permissions.Admin;

// 移除权限
combinedPermissions &= ~Permissions.Write;

通过这样的位运算,每个权限对应一个比特位,因此可以在单个变量中存储多个权限,并且能方便地进行设置、查询和修改操作。

总结一下

TypeScript中的枚举是一种用于定义一组具有命名值的常量的数据类型。
它可以提高代码的可读性和可维护性,并支持数字和字符串两种形式。

type类型别名相对于字面量具有更大的灵活性和可读性,但在某些情况下可能会导致代码变得复杂和难以维护。
枚举提供了一种更简单和直观的方式来定义一组常量值,但在动态扩展和复杂操作方面有一些限制。

因此,在选择使用type还是枚举时,需要根据具体情况进行判断。
另外,枚举的位运算运用得当时会有奇效。

标签:运算,Permission,ts,枚举,按位,权限,Permissions
From: https://www.cnblogs.com/longmo666/p/18034965

相关文章

  • 在typescript项目中什么场景适合定义枚举值,什么场景适合定义常量类?
    在typescript项目中什么场景适合定义枚举值,什么场景适合定义常量类在TypeScript中,枚举(enum)和常量类(通常是带有只读属性的类)都有其适用场景:适合定义枚举值的场景:有限且命名的集合:当你需要表示一组固定的、可枚举的值,并且每个值都有一个明确的名字时,使用枚举类型是合适的。......
  • [DotnetSec]XmlSerializer 反序列化 分析
    Dotnet-XmlSerializer反序列化序列化和反序列化的演示Demo参考微软的文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.xml.serialization.xmlserializer?view=net-5.0XmlSerializer命名空间:System.Xml.Serialization程序集:System.Xml.XmlSerializer.dll演示......
  • 浙江中控 inplantscada 安装 demo运行报错
    1、卸载inplantscada和杀毒软件。重新安装inplantscada(成功跑起来)。安装虚拟机win7跑不起来。2、还原官网下载的电气demo程序。 成功截图:    没有重装inplantscada和卸载杀毒软件,运行demo报错截图:  备注:建index页面。管理员方式运行,也解决不了,只有重新安装i......
  • LightDB-X 24.1 支持 Oracle DBMS_STATS.GATHER_TABLE_STATS 存储过程
    LightDB-X24.1支持OracleDBMS_STATS.GATHER_TABLE_STATS存储过程背景LightDB-X一直在不断提升对Oralce的兼容性,降低基于Oracle的业务系统迁移到LightDB-X的门槛。在24.1版本中支持了Oracle的DBMS_STATS.GATHER_TABLE_STATS存储过程,提高了对Oracle管理功能......
  • 详细vite创建vue3项目(vue3+vue-router+ts+vite+element-plus+pinia)
    详细vite创建vue3项目(vue3+vue-router+ts+vite+element-plus+pinia):https://blog.csdn.net/qq_44423029/article/details/126378199?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170891147716800185818285%2522%252C%2522scm%2522%253A%252220140713.130102334..%2......
  • ssts-hospital-web-master项目实战记录三十:项目迁移-插件实现说明
    记录时间:2024-02-26一、准备工作【使用“文心一言”搜索:Vue.js中模块和插件有什么区别?】在Vue.js中,模块(Modules)和插件(Plugins)都是用于扩展和增强Vue.js功能的方式,但它们在使用和目的上有一些不同。模块(Modules)模块是Vue.js中组织代码的一种方式,通常用于将应用程序划分为不同......
  • LTspice 修改波形图与电路图配色
    前言LTspice的默认颜色设置看起来比较偏暗,且不太适合截图使用,如下所示:本文介绍通过修改默认颜色设置来实现电路图颜色和BSch3V,波形图和gnuplot的配色相似。LTspice的颜色设置可以通过[Tools]->[ColorPreferences]来进行。波形图配色设置波形显示的颜色设置通过上图Col......
  • ssts-hospital-web-master项目实战记录十六:项目迁移-模块实现(page-info)
    记录时间:2024-02-25二、page-info模块实现framework/page-info/index.ts//javascript用来遍历指定对象所有的属性名称和值//obj需要遍历的对象constallProps=function(obj:any,props:string=''):string{ //使用Object.keys()获取对象自身的所有属性键 ......
  • ssts-hospital-web-master项目实战记录十四:项目迁移-模块实现(log-local)
    记录时间:2024-02-25一、log-local模块实现framework/config/index.ts//终端日志文件配置constLogTerminalInfoDir='D:\\LogInfo\\LogTerminalInfo\\'constLogTerminalInfoFileNamePrefix='LogTerminalInfo'//错误页面快照文件配置constLogErrorPageSnapshotFil......
  • 枚举、注解
    枚举枚举对应英文(enumeration,简写enum)枚举是一组常量的集合可以这里理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象枚举实现方式自定义实现枚举使用enum关键字实现枚举自定义publicclassEnumeration01{publicstaticvoidmain(String[]args)......