TypeScript07:枚举enum

一、扩展类型

扩展类型:类型别名、枚举、接口、类。

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

字面量和联合类型配合使用,也可以达到同样的目标。

二、字面量类型的问题 

  1. 在类型约束位置,会产生重复代码。可以使用类型别名解决该问题;
  2. 逻辑含义和真实的值产生了混淆,会导致当修改真实值的时候,产生大量的修改;
  3. 字面量类型,不会进入编译结果。

三、枚举

 1.如何定义一个枚举

enum 枚举名{

        枚举字段1 = 值1,

        枚举字段2 = 值2,

        ...

}

enum Sex { male = "男",female = "女"
}let sex: Sex
sex = Sex.maleconsole.log(sex); // 男

上面代码中,将枚举中的 male 改为 "帅哥" ,则输出 "帅哥"

枚举会出现在编译结果中,编译结果中表现为 对象 

var Sex;
(function (Sex) {Sex["Male"] = "\u7537";Sex["Female"] = "\u5973";
})(Sex || (Sex = {}));
let sex;
sex = Sex.Male;
console.log(sex);

 2.枚举的规则

  • 枚举的 字段值 可以使用 字符串 或者 数字
  • 数字枚举的值会 自增 ,当第一个字段没有赋值时,默认为 0
  • 被数字枚举约束的变量,可以直接赋值为数字,可能会导致问题,不推荐;
  • 数字枚举的编译结果 字符串的编译结果有差异;
enum Level { level1 = 2,level2,level3,
}let l: Level = Level.level2console.log(l); // 3
enum Level { level1,level2,level3,
}let l: Level = Level.level1console.log(l); // 0

数字枚举的编译结果:

var Level;
(function (Level) {Level[(Level["level1"] = 0)] = "level1";Level[(Level["level2"] = 1)] = "level2";Level[(Level["level3"] = 2)] = "level3";
})(Level || (Level = {}));
/*
{level1: 0,level2: 1,level3: 2,0:"level1",1:"level2",2:"level3"
}
*/
let l = Level.level1;
console.log(l);

因此循环遍历数字枚举时需要考虑到这点。

3.最佳实践 

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

四、位枚举(枚举的位运算)

位枚举针对数字枚举。

位运算:两个数字换算成二进制的运算。

// 位枚举
enum Permission { Read = 1, // 2^0 0001Write = 2, // 2^1 0010Create = 4, // 2^2 0100Delete = 8 // 2^3 1000
}// 1.如何组合权限:使用或运算
let p: Permission = Permission.Read | Permission.Write// 2.如何判断是否有权限:使用与运算
// let hasRead: boolean = (p & Permission.Read) === Permission.Read
function hasPermission(target: Permission, per: Permission) { return (target & per) === per
}
// 判断变量p是否拥有可读权限
console.log(hasPermission(p, Permission.Read)); // true// 3.如何删除某个权限:使用异或运算
p = p ^ Permission.Write
console.log(hasPermission(p, Permission.Write)); // false

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

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

相关文章

PSMC:绘图脚本 psmc_plot.pl 脚本参数详解

=> psmc_plot.plUsage: psmc_plot.pl [options] <out.prefix> <in.psmc>Options: -u FLOAT absolute mutation rate per nucleotide [2.5e-08]-s INT skip used in data preparation [100]-X FLOAT maximum generations,

机器学习图像识别如何处理标签以外的图像?

机器学习图像识别技术是一种基于人工智能的图像处理方法&#xff0c;它通过训练大量的图像数据集来让计算机学习如何识别和分类图像。在图像识别任务中&#xff0c;我们通常需要对图像进行标注和分类&#xff0c;以便让计算机能够从中学习。但是&#xff0c;有时候我们可能会遇…

大数据旅游数据分析:基于Python旅游数据采集可视化分析推荐系统

文章目录 基于Python旅游数据采集可视化分析推荐系统一、项目概述二、项目说明三、开发环境四、功能实现五、系统页面实现用户登录注册系统首页数据操作管理价格与销量分析旅游城市和景点等级分析旅游数据评分情况分析旅游数据评论情况分析旅游景点推荐Django系统后台管理 六、…

centos7 安装python3.8运行导入ssl报错,亲测验证有效版

centos安装python3.7时遇到如下问题&#xff0c;查阅知需要的openssl版本最低为1.0.2&#xff0c;但是centos 默认的为1.0.1&#xff0c;所以需要重新更新openssl import _ssl # if we cant import it, let the error propagate ImportError: No module named _ssl1、安…

【前端早早聊直播回顾】Harmony 时代的跨端方案

上周末&#xff0c;凡泰极客CTO - 徐鹏受邀出席「前端早早聊」直播活动&#xff0c;并以【跨端新挑战-鸿蒙时代的跨端】为主题进行演讲。 摘取部分分享实录&#xff1a; 终端系统的数量和种类不断增长&#xff0c;开发者面临着多平台开发的挑战。以往开发者一般只需要维护iOS、…

2024年3月阿里云服务器大规模价格下调后优惠折扣表

阿里云服务器ECS等核心产品价格全线下调&#xff0c;最高幅度达55%&#xff0c;2024年3月1日生效&#xff0c;针对ECS部分在售产品的官网折扣价、ECS计算型节省计划进行调整&#xff0c;生效后&#xff0c;基于官网折扣价的新购和续费&#xff0c;将按照新的价格进行计费。阿里…

程序媛的mac修炼手册-- Node.js入门篇

最近因为参与一个微信小程序的开发&#xff0c;开始摸索JavaScript。期间&#xff0c;需要基于Node.js安装微信开发工具的依赖项&#xff0c;所以又顺带学习了Node.js的包管理工具npm&#xff08;Node Package Manager&#xff09;。不过&#xff0c;之前看到国外的全栈大佬​​…

flutter学习(一) 安装以及配置环境

首先需要下载flutter&#xff0c;然后解压 然后配置环境变量&#xff0c;配置到bin目录就行 配置完之后cmd运行flutter doctor 你就会发现&#xff0c;都是错 此时脑海里响起&#xff0c;卧槽&#xff0c;怎么回事&#xff0c;咋办 别着急&#xff0c;我教你。。。 问题 这…

RK3568 RK809电源管理 RTC功能使能 定时唤醒

概述 RK809 是一款高性能 PMIC,RK809 集成 5 个大电流 DCDC、9 个 LDO、2 个 开关SWITCH、 1个 RTC、1个 高性能CODEC、可调上电时序等功能。 系统中各路电源总体分为两种:DCDC 和 LDO。两种电源的总体特性如下(详细资料请自行搜索): DCDC:输入输出压差大时,效率高,但…

python学习笔记 - 标准库常量

Python 中有一些内置的常量&#xff0c;它们是一些特殊的值&#xff0c;通常不会改变。以下是其中一些常见的内置常量及其详细解释以及使用示例&#xff1a; True&#xff1a; 表示布尔值真。给 True 赋值是非法的并会引发 SyntaxError。 x True print(x) # 输出&#xff1a…

内网穿透 nas/树莓派+ipv4服务器 (ipv6)

nas 1.有个服务器 2.有个nas https://github.com/snail007/goproxy/blob/master/README_ZH.md https://github.com/snail007/proxy_admin_free/blob/master/README_ZH.md 2个官网一个是程序&#xff0c;一个是网站 手册 https://snail007.host900.com/goproxy/manual/zh/#/?i…

Unity3D Shader事项法线贴图功能详解

前言 Unity3D它提供了丰富的功能和工具&#xff0c;使开发人员能够轻松创建出色的游戏和应用程序。其中Shader是Unity3D中非常重要的一部分&#xff0c;它可以帮助开发人员实现各种视觉效果&#xff0c;包括法线贴图功能。 对惹&#xff0c;这里有一个游戏开发交流小组&#…

rocketmq+rocket-dashboard win10安装部署+注册为Windows服务

1.1 首先去官网下载zip包 选择自己需要的版本 下载 | RocketMQ 1.2 、下载后&#xff0c;解压到指定目录 1.3、配置RocketMQ环境变量 注意&#xff0c;看对应的版本需要jdk版本 1.4、启动mqnameserver 进入bin目录下&#xff0c;双击启动mqnamesrv.cmd 启动后&#xff0c;…

灰度图像转化为黑白图像、转化图像为一位位深度的图像(仅保留黑色)

/// <summary> /// 灰度图像处理 /// </summary> public class PicGray {/// <summary>/// 获取pic图像对应的黑白图像/// </summary>/// <param name"pic"></param>/// <param name"NumGray">像素灰度值</p…

webpack5基础--02_基本配置( 5 大核心概念)

基本配置 在开始使用 Webpack 之前&#xff0c;我们需要对 Webpack 的配置有一定的认识。 5 大核心概念 entry&#xff08;入口&#xff09; 指示 Webpack 从哪个文件开始打包 output&#xff08;输出&#xff09; 指示 Webpack 打包完的文件输出到哪里去&#xff0c;如何…

Vue项目构建时遇到的问题

Vue项目构建时遇到的问题与上线相关问题 项目构建遇到的问题构建指令关于JavaScript文件无法识别的问题关于element-plus组件库中的模块显示找不到的问题关于路由懒加载时组件路径报错问题关于项目静态资源基准路径的设置关于路由模式的问题 关于nginx服务器的使用 项目构建遇到…

事物管理(黑马学习笔记)

事物回顾 在数据库阶段我们已学习过事务了&#xff0c;我们讲到&#xff1a; 事物是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功&#xff0c;要么同时…

java实现根据 表索引 批量新增或更新数据信息

目的 通过数据库名、表名实现动态添加活更新数据。添加或更新由唯一索引判断。 实现 思路 查询数据库表的唯一索引-CSDN博客 根据数据库表名动态查询表字段-CSDN博客 达梦数据库根据唯一索引批量新增或更新数据-CSDN博客 将数据转换为sql语句需要的格式 完善代码&#xff0c;实…

maven常用打包命令

1.背景 2.代码 1 mvn常用命令 一般情况下对于一个maven项目&#xff0c;cd切换到当前项目路径下&#xff0c;执行如下示例命令即可对项目进行打包。 mvn clean install mvn -U clean package -Dmaven.test.skiptrue mvn clean package -Dmaven.test.skiptrue -P prod mvn cle…

JavaScript数组操作指南:20个精通操作技巧指南

splice、 slice、 pop 和 shift。数组的排序方法是稳定且非原地算法的吗&#xff1f;要记住所有 JavaScript 数组方法以及它们之间的区别并不容易。它们的名称相似&#xff0c;就好像直接从同义词词典中提取一样。 这个数组速查表列出了 JavaScript 中通常需要的所有数组方法&…