TypeScript枚举类型详情、类型断言

news2024/11/24 4:07:18

一. 概念

TypeScript中的枚举是一种数据类型,它是一组具有预定义名称的有限值的集合。枚举类型可以使代码更加可读、可维护和易于理解。
类似对象,枚举是将一组无序但极度相关数组集合在一起声明存储。

二. 枚举特性

1. 内部进行了双向赋值

 enum Numbers  {
    a,
    b,
    c
}

源码

var Numbers;
(function(Numbers) {
    Numbers[Numbers['a'] = 0] = 'a';
    Numbers[Numbers['b'] = 1] = 'b';
    Numbers[Numbers['c'] = 2] = 'c';
})(Numbers || (Numbers = {}))

打印结果

console.log(Numbers[a]) // 0
console.log(Numbers['0']) // 'a'

2. 即可以作为一种类型,也可以作为一种存储方式

1.作为一种类型

enum Colors {
    SUCCESS = 'green',
    DANGER = 'red',
    WARN = 'orange'
}
const buttonClor:Colors = Colors['SUCCESS']
console.log(buttonClor) // 'green'

其中Colors作为一种类型

如果直接赋值的话,类型就会改变

enum Colors {
    SUCCESS = 'green',
    DANGER = 'red',
    WARN = 'orange'
}
const buttonClor:Colors = 'green'

会有如下报错
在这里插入图片描述
上述例子,在赋值的同时,同时也把buttonClor的类型限制为string,因为buttonClor的赋值范围是固定的,所以用枚举可以缩小其赋值范围,更加准确

2. 作为一种存储方式
例如上述例子,我们也可以通过Colors[‘SUCCESS’]去获取数据,说明枚举Colors作为一个容器,也存储了数据,并支持访问。同时也避免了大量常量的赋值和使用

三. 实战演练

1. 完整代码

enum typeEnum {
    ID,
    CONTENT,
    COMPLETED
}



interface toDoTypeValue  {
    id: number,
    content: string,
    completed: boolean
}

const todoSet:toDoTypeValue = {
    id: 1,
    content: '',
    completed: false
}
type typeValue = number | string |boolean

function setTodo (type:typeEnum, value:typeValue) {
    switch(type) {
        case typeEnum.ID:
        todoSet.id = value as number;
        break;
        case typeEnum.CONTENT:
            todoSet.content = value as string;
            break;
            case typeEnum.COMPLETED:
            todoSet.completed = value as boolean;
            break;
    }
}

setTodo(typeEnum.ID,1)
setTodo(typeEnum.CONTENT,'hello jack')
setTodo(typeEnum.COMPLETED,true);
console.log(todoSet)

打印结果

{
  "id": 1,
  "content": "hello jack",
  "completed": true
} 

2. 使用枚举的好处

使用对象中的typeof

function setTodo (value) {
    switch(typeof value) {
        case 'number':
        todoSet.id = value;
        break;
        case 'string':
            todoSet.content = value;
            break;
            case 'boolean':
            todoSet.completed = value;
            break;
    }
}

缺点:后续对象可能会添加多个属性,所以一种类型可能对应了多个属性,可维护性差。

type使用常量


function setTodo (type,value) {
    switch(type) {
        case 'id':
        todoSet.id = value;
        break;
        case 'content':
            todoSet.content = value;
            break;
            case 'completed':
            todoSet.completed = value;
            break;
    }
}

setTodo('id',1)
setTodo('content','hello jack')
setTodo('completed',true);

缺点: 如果有多个属性,需要书写多个属性常量,并且多个属性零散,没有统一维护。代码不够优雅,且可维护性差

四. value为什么使用类型断言?

function setTodo (type:typeEnum, value:typeValue) {
    switch(type) {
        case typeEnum.ID:
        todoSet.id = value as number;
        break;
        case typeEnum.CONTENT:
            todoSet.content = value as string;
            break;
            case typeEnum.COMPLETED:
            todoSet.completed = value as boolean;
            break;
    }
}

因为todoSet的属性的值的类型都是确定的,但是value的值是typeValue的数据类型是多种类型的其中一种,没有确定类型,所以需要断言确定value的类型

type data = string | number
function test(parmas:data):data {
    let resdata = parmas;
    return resdata
}

像这种resdata未指定类型,就不需要进行类型断言。

总结:在某些特定的情况下,类型别名可能无法提供足够的精度来满足编译器,使用类型断言来显式地将类型转换为相应的类型可以为此类情况提供解决方案。

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

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

相关文章

Socket和Http通信原理

Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议,主要利用三元组【ip地址,协议,端口】。 Http协议即超文本传输协议&a…

VIVADO-FFT IP核学习记录

根据用户手册使用IP核 ① 找到user guide / product guide 并打开 ② 找到Customizing and Generating the Core(不同手册可能题目不一样),查看IP核的创建过程中各个参数的意义和设置方法。 ③ 找到port description ,查看接口注释 根据网络教程使用…

WPS Office JS宏实现批量处理Word中的标题和正文的样式

该篇讲解下word文档中的标题和正文批量修改样式,如下图: 前面一篇已讲解了WPS Office宏编辑器操作方法,这里不细讲了,如有不清楚可以查看该篇:https://blog.csdn.net/jiciqiang/article/details/134653657?spm1001.20…

创建腾讯云存储桶---上传图片--使用cos-sdk完成上传

创建腾讯云存储桶—上传图片 注册腾讯云账号https://cloud.tencent.com/login 登录成功,选择右边的控制台 点击云产品,选择对象存储 创建存储桶 填写名称,选择公有读,私有写一直下一步,到创建 选择安全管理&#…

机器人制作开源方案 | 自主型收集餐盘机器人

作者:蔡佳怡、朱启会、郭晨杰、杨昊天、焦家辉 单位:西安外事学院 指导老师:杜喜昭、张燕 1. 产品说明 1.1 设计目的 对于如学校、工厂这种大型食堂,一般的收餐盘模式为用餐人用餐完毕后,把餐盘拿到最近的收餐盘点&…

5.清除SVN用户账号两种方式

常用的客户端又分为2种,第一种是安装在操作系统中的客户端,另外一种是Eclipse的插件 1.操作系统中的客户端 用的小乌龟,在小乌龟里面先把账户信息删除: 1、随便找一个目录,右键tortoiseSVN-------》setting--------…

【DPDK】Trace Library

概述 跟踪是一种用于了解运行中的软件系统中发生了什么的技术。用于跟踪的软件被称为跟踪器,在概念上类似于磁带记录器。记录时,放置在软件源代码中的特定检测点会生成保存在巨大磁带上的事件:跟踪文件。稍后可以在跟踪查看器中打开跟踪文件…

Windows XP安装SVN软件

SVN全称为SubVersion,是Apache开源软件协议下,一个用于代码分布式管理的工具,其孵化的软件产品是TortoiseSVN,该软件是带图形界面的代码管理工具,类似于Git,多了一个图形界面,方便鼠标操作。  …

【每日OJ —— 145. 二叉树的后序遍历】

每日OJ —— 145. 二叉树的后序遍历 1.题目:145. 二叉树的后序遍历2.解法2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目:145. 二叉树的后序遍历 2.解法 2.1.算法讲解 1.首先如果在每次每个节点遍历的时候都去为数组开辟空间,这样的效率太…

MATLAB - 评估拟合优度、评价拟合效果

系列文章目录 文章目录 系列文章目录前言一、如何评估拟合优度二、拟合优度统计2.1 SSE - 误差引起的平方和2.2 R 平方2.3 自由度调整 R 平方2.4 均方根误差 三、MATLAB - 评估曲线拟合度3.1 加载数据并拟合多项式曲线3.2 绘制拟合方程、数据、残差和预测范围图3.3 评估指定点3…

外包干了2个月,技术倒退2年。。。

先说一下自己的情况,本科生,20年通过校招进入深圳某软件公司,干了接近4年的功能测试,今年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

c++--面向对象特性

1.面向对象指的是继承,封装,多态。 继承主要关注类的构造,赋值,析构。 以下对多态,封装进行补充说明。 2、多态 2.1.定义 a.赋值 派生类的指针,可以赋值给基类的指针。 派送类的对象,可以赋值给…

某60区块链安全之JOP实战二学习记录

区块链安全 文章目录 区块链安全Jump Oriented Programming实战二实验目的掌握对EVM逆向能力实验环境实验工具实验原理实验内容Jump Oriented Programming实战二 实验步骤Jump Oriented Programming实战二 实验目的 学会使用python3的web3模块 学会分析以太坊智能合约中中Jum…

MySQL_1. mysql数据库介绍

shell脚本差不多快完结了接下来会为大家更新MySQL系列的相关的基础知识笔记,希望对大家有所帮助,好废话不多说,接下来开始正题! 1.mysql数据库介绍 mysql 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言…

C#,数值计算——计算实对称矩阵所有特征值与特征向量的三角分解与QL迭代法源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Computes all eigenvalues and eigenvectors of a real symmetric matrix by /// reduction to tridiagonal form followed by QL iteration. /// </summary> pu…

Linux磁盘阵列raid

RAID介绍 RAID &#xff08; Redundant Array of Independent Disks &#xff09;即独立磁盘冗余阵列&#xff0c;通常简称为磁盘阵列。简单地说&#xff0c; RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统&#xff0c;从而提供比单个磁盘更高的存储性能和数据冗余的技…

使用 javascript 模拟 git diff 命令实现文本文件差异比较

diff.html&#xff1a; <!DOCTYPE html> <html> <head><title>文件比较</title><meta charset"UTF-8"> </head> <body> <h1>文件比较</h1> <form><label for"file1">版本1&…

微服务1 springcloud学习笔记P1-P40

b微服务技术栈_哔哩哔哩_bilibili 文档资料: 链接&#xff1a;https://pan.baidu.com/s/1P_Ag1BYiPaF52EI19A0YRw?pwdd03r 提取码&#xff1a;d03r 一 了解微服务技术 二 Eureka (1) Eureka配置 (2) 注册user-service (3) 总结 Ribbon 负载均衡 (1) 流程 三 nacos配置管理…

CFS三层靶机内网渗透

CFS三层靶机内网渗透 一、靶场搭建1.基础参数信息2.靶场搭建2.1网卡配置2.2Target1配置2.2.1 网卡配置2.2.2 Target1 BT配置 2.3Target2配置2.3.1 网卡配置2.3.2 Target2 BT配置 2.4Target3配置 二、内网渗透Target11.1信息收集1.1.1IP收集1.1.2端口收集1.1.3目录收集 1.2 webs…

思维模型 移情效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。情感迁移&#xff0c;爱屋及乌。 1 移情效应的应用 1.1 移情效应在市场营销中应用-多芬&#xff08;Dove&#xff09;“真美运动” 多芬&#xff08;Dove&#xff09;是一家知名的个人护理…