TS学习3-枚举

目录

  • 1,枚举
  • 2,定义枚举
  • 3,枚举的规则
    • 1,枚举的值可以是字符串或数字,分别称为字符串枚举、数字枚举
    • 2,数字枚举的值会自增
    • 3,枚举会出现在编译结果中,并且数字枚举和字符串枚举,编译结果有差异
    • 4,被数字约束的变量,可以直接赋值为数字
  • 4,最佳实践
  • 5,枚举的位运算

1,枚举

作用:通常用于约束某个变量的取值范围。

虽然字面量+联合类型,也能实现这个作用。但字面量类型不会进入编译结果

let gender: '男' | '女'

编译结果

let gender;

2,定义枚举

enum 枚举名称 {枚举字段1 =1,枚举字段2 =2
}

3,枚举的规则

1,枚举的值可以是字符串或数字,分别称为字符串枚举、数字枚举

字符串枚举

enum Gender {male = '男',famale = '女'
}

数字枚举

enum Level {level1 = 1,level2 = 2,level3 = 3,
}

2,数字枚举的值会自增

第1个默认从 0 开始。

enum Level {level1 = 1,level2,level3 = 5,level4,level5,
}

相当于

// 数字枚举
enum Level {level1 = 1,level2 = 2,level3 = 5,level4 = 6,level5 = 7,
}

3,枚举会出现在编译结果中,并且数字枚举和字符串枚举,编译结果有差异

enum Level {level1 = 1,level2 = 2,level3 = '3'
}

编译结果

var Level = {1: "level1",2: "level2",level1: 1,level2: 2,level3: "3",
};

并且因为会出现在编译结果中,所以可以在 ts 中直接使用

const L: Level = Level.level1

4,被数字约束的变量,可以直接赋值为数字

以上面的例子来说,也可以直接赋值为 1 或 2

const L1: Level = Level.level1
const L2: Level = 1

但赋值为字符串,会报错。

const L3: Level = "3"

4,最佳实践

  • 尽量不要在一个枚举中即出现字符串字段,又出现数字字段。
  • 使用枚举时,尽量使用枚举字段的名称,而不使用真实的值。

以上面的例子来说:

const L: Level = Level.level1// 不推荐
const L2: Level = 1

5,枚举的位运算

典例:用于控制权限

enum Permisson {Read = 1, // 2^0    0001Write = 2, // 2^1   0010Create = 4, // 2^2  0100Delete = 8, // 2^3  1000
}

1,位运算 | 或,表示操作数对应的二进位有一个是 1,则返回 1。比如 0001 | 0010 返回 0011

增加读写权限:

const pReadAndWrite = Permisson.Read | Permisson.Write

2,位运算 & 与,表示操作数对应的二进位都是 1 则返回1。比如 0011 | 0010 返回 0010

判断权限:

function hasPermission(target: Permisson, somePer: Permisson) {return (target & somePer) === somePer
}
hasPermission(pReadAndWrite, Permisson.Read) // true
hasPermission(pReadAndWrite, Permisson.Write) // true
hasPermission(pReadAndWrite, Permisson.Create) // false

3,位运算 ^ 异或,表示操作数对应的二进位不相同时才返回 1。比如 0011 | 0010 返回 0001

删除写权限:

let pOnlyRead = pReadAndWrite ^ Permisson.Write

以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/827644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4.23学习总结

一.NIO(一) (一).简介: NIO 是 Java SE 1.4 引入的一组新的 I/O 相关的 API,它提供了非阻塞式 I/O、选择器、通道、缓冲区等新的概念和机制。相比与传统的 I/O 多出的 N 不是单纯的 New,更多的是代表了 Non-blocking 非阻塞,NIO具有更高的并…

【Linux高性能服务器编程】两种高性能并发模式剖析——半同步/半异步模式

hello !大家好呀! 欢迎大家来到我的Linux高性能服务器编程系列之两种高性能并发模式介绍,在这篇文章中,你将会学习到高效的创建自己的高性能服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家来理解…

《HCIP-openEuler实验指导手册》1.4 Apache MPM工作模式调整

MPM介绍 二、配置步骤 查看MPM当前工作模式 方法一: httpd -M | grep mpm方法二: 浏览器访问:http://IP:端口/server-status 方法三: cat /etc/httpd/conf.modules.d/00-mpm.conf查看 LoadModule mpm_event_module modules/mo…

Iterator 迭代器

意图 提供一个方法顺序访问一个聚合对象中的各个元素,且不需要暴漏该对象的内部表示。 结构 Iterator(迭代器)定义访问和遍历元素的接口。ConcreteIterator(具体迭代器)实现迭代器接口;对该聚合遍历是跟踪…

DSSM 模型技术介绍

转自:git 本文属于新闻推荐实战-召回阶段-DSSM召回模型。区别于策略召回,基于向量召回也是目前工业界常用的一种召回方法。这里我们将介绍一个比较经典的召回模型DSSM,希望读者可以快速掌握模型原理以及细节,同时可以了解具体的实…

Nacos原理简单介绍

注册中心原理 官网:Nacos 注册中心的设计原理 | Nacos nacos注册中心采用了 :pull (客户端的轮询)和push (服务端主动push)策略 客户端启动时会将当前服务的信息包含ip、端口号、服务名、集群名等信息封装…

电脑问题快速判断

电脑开机没有任何反应 检查电源 检查电源是否有问题或损坏,可以短接方法检测 板电源卡口对自己接第四或第五根线,若风扇匀速转动,电源无问题,若不转动或转一下停一下,电源有问题 检查内部连线 确保主板上的线插的…

2024新算法角蜥优化算法(HLOA)和经典灰狼优化器(GWO)进行无人机三维路径规划设计实验

简介: 2024新算法角蜥优化算法(HLOA)和经典灰狼优化器(GWO)进行无人机三维路径规划设计实验。 无人机三维路径规划的重要意义在于确保飞行安全、优化飞行路线以节省时间和能源消耗,并使无人机能够适应复杂…

手把手教你搭建鲜花团购小程序

随着互联网的快速发展,线上小程序商城已经成为了一种流行的电商模式。对于花店来说,开发线上小程序商城不仅可以扩大销售渠道,提高销售效率,还可以增加客户粘性,提升品牌形象。下面就以花店为例,教你怎么开…

OceanBase V4.2特性解析:用 Show Trace 快速定位数据库性能瓶颈

在数据库日常运维中,当遇到慢SQL问题时,若无法迅速查明原因,将极大地影响用户的使用感受,甚至可能引发业务或服务的中断。相较于单机数据库,分布式数据库系统因其涉及多个节点和多组件的协同工作,集群规模可…

DSP开发实战教程--EPWM模块的影子寄存器详细讲解原理和代码实例

EPWM模块影子寄存器的原理 在TI(Texas Instruments)的DSP28335中,EPWM(Enhanced Pulse Width Modulator)模块提供了高精度、高灵活性的PWM信号生成功能。为了能在不影响当前PWM波形输出的情况下预装载新的PWM参数(如周期、占空比等),EPWM模块引入了影子寄存器的概念。 …

STM32 ADC转换器

一、ADC简介 ADC(Analog-Digital Converter,模拟-数字转换器),可以将引脚上连续变化的模拟量转换为内存中存储的数字量,建立模拟电路到数字电路的桥梁 模拟量:时间和幅值均连续的信号,例如&…

sklearn 笔记 metrics

1 分类 1.1 accuracy_score 分类准确率得分 在多标签分类中,此函数计算子集准确率:y_pred的标签集必须与 y_true 中的相应标签集完全匹配。 1.1.1 参数 y_true真实(正确)标签y_pred由分类器返回的预测标签normalize 默认为 Tr…

LLama的激活函数SwiGLU 解释

目录 Swish激活函数 1. Swish函数公式 LLaMA模型中的激活函数 1. SwiGLU激活函数 2. SwiGLU激活函数的表达式 3. SwiGLU激活函数的优势 Swish激活函数 Swish是一种激活函数,其计算公式如下: 1. Swish函数公式 Swish(x) x * sigmoid(x) 其中&am…

概率图模型在机器学习中的应用:贝叶斯网络与马尔可夫随机场

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

【重要】Heygen订阅指南和用法详解!让照片学说话?一张照片变演讲?Heygen订阅值得吗?

常见问题 Q:Heygen是什么?Heygen是什么玩意? A:Heygen是一款由AI视频工具,创作者只需要上传视频并选择要翻译的语言,该工具可实现自动翻译、调整音色、匹配嘴型。为了方便理解,笔者利用Heygen制作了一个AI视…

裤裤带你一起学C语言内存函数啦!

目录 1.memcpy的使用和模拟实现 2.memmove使用和模拟实现 3.memset函数的使用 4.memcmp函数的使用 内存函数在<string.h>库中&#xff0c;我们使用内存函数必须先引入<string.h>头文件 1.memcpy的使用和模拟实现 memcpy的函数原型如下&#xff1a; void * m…

Vue--》深入了解 VueUse 功能性工具集

今天博主为大家介绍一款实用性的插件名字叫做 VueUse &#xff0c;它是专门为 Vue.js 生态系统设计的功能性工具集合。其提供了许多可重用的功能函数&#xff0c;可以帮助开发者更轻松地构建 Vue.js 应用程序。其提供了大量的功能&#xff0c;包括状态管理、副作用管理、组合式…

【刷题】前缀和入门

送给大家一句话&#xff1a; 既然已经做出了选择&#xff0c;最好还是先假定自己是对的。焦虑未来和后悔过去&#xff0c;只经历一个就够了。 – 张寒寺 《不正常人类症候群》 ☆ミヾ(∇≦((ヾ(≧∇≦)〃))≧∇)ノ彡☆ ☆ミヾ(∇≦((ヾ(≧∇≦)〃))≧∇)ノ彡☆ ☆ミヾ(∇≦((ヾ…

react引入iconfont的svg图标

react引入iconfont的svg图标 本文目录 react引入iconfont的svg图标普通图标通过link引入css组件内引入css使用 svg图标通过script引入js组件内引入js使用 通过封装组件自定义封装组件中调用 通过antd封装使用 普通图标 通过link引入css <link rel"stylesheet" h…