TypeScript枚举(Enums)和泛型(Generics)

 🎬 岸边的风:个人主页

 🔥 个人专栏 :《 VUE 》 《 javaScript 》

⛺️ 生活的理想,就是为了理想的生活 !

在这里插入图片描述

目录

枚举

异构枚举

枚举成员的类型

泛型

1. 函数泛型

2. 接口泛型

3. 类泛型


接下来我们将学习TypeScript 中的两个重要主题:枚举(Enums)和泛型(Generics)。这两个特性能大大提高代码的可重用性和安全性。

枚举

枚举是 TypeScript 中一种特殊的数据类型,允许我们为一组数值设定友好的名字。枚举的定义使用 enum 关键字。

enum Direction {Up = 1,Down,Left,Right,
}

在这个例子中,我们定义了一个名为 Direction 的枚举,它有四个成员:UpDownLeft 和 RightUp 的初始值为 1,其余成员的值会自动递增。

除了使用数值,我们也可以使用字符串:

enum Direction {Up = "UP",Down = "DOWN",Left = "LEFT",Right = "RIGHT",
}

此外,TypeScript 还支持计算的和常量成员。常量枚举通过 const enum 进行定义,TypeScript 会在编译阶段进行优化:

const enum Enum {A = 1,B = A * 2
}

异构枚举

TypeScript 支持数字和字符串混用的枚举,这种类型的枚举被称为异构枚举:

enum BooleanLikeHeterogeneousEnum {No = 0,Yes = "YES",
}

尽管 TypeScript 支持这种用法,但我们在实际项目中应尽可能避免使用异构枚举,因为这会引入不必要的复杂性。

枚举成员的类型

在某些特殊的情况下,枚举成员本身也可以作为一种类型:

enum ShapeKind {Circle,Square,
}interface Circle {kind: ShapeKind.Circle;radius: number;
}interface Square {kind: ShapeKind.Square;sideLength: number;
}

泛型

在 TypeScript 中,泛型(Generics)是一种强大的类型工具,它允许我们编写可重用、灵活和类型安全的代码。泛型允许我们在定义函数、类或接口时使用类型参数,这些类型参数在使用时可以被动态地指定具体的类型。

1. 函数泛型

函数泛型允许我们编写可适用于多种类型的函数,提高代码的重用性和灵活性。例如:

function identity<T>(arg: T): T {return arg;
}let result = identity<number>(42);  // result的类型为number

在上面的示例中,identity函数接受一个类型参数T,表示输入和输出的类型。通过在函数调用时显式指定类型参数为number,我们可以将42传递给identity函数并推断出结果的类型为number

2. 接口泛型

接口泛型允许我们创建可适用于不同类型的接口定义。例如:

interface Pair<T, U> {first: T;second: U;
}let pair: Pair<number, string> = { first: 42, second: "hello" };

在上面的示例中,我们定义了一个Pair接口,它接受两个类型参数TU,表示firstsecond属性的类型。通过指定类型参数为numberstring,我们创建了一个具体的pair对象,它的first属性类型为numbersecond属性类型为string

3. 类泛型

类泛型允许我们创建可适用于不同类型的类定义。例如:

class Container<T> {private value: T;constructor(value: T) {this.value = value;}getValue(): T {return this.value;}
}let container = new Container<number>(42);
let value = container.getValue();  // value的类型为number

在上面的示例中,我们定义了一个Container类,它接受一个类型参数T,表示类的内部值的类型。通过在创建类的实例时显式指定类型参数为number,我们创建了一个具体的container对象,它的value属性类型为number,并可以使用getValue方法获取该值。

泛型还支持约束(Constraints)的概念,通过使用约束,我们可以限制泛型的类型范围,使其满足特定的条件。

泛型在 TypeScript 中广泛应用于函数、类、接口和类型别名的定义中,它提供了一种灵活、类型安全且可重用的方式来处理不同类型的数据。通过使用泛型,我们可以在编写代码时提供更强大的类型支持,从而减少错误并提高代码的可维护性和可读性。

 

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

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

相关文章

SuperMap iClient3D 11i (2023) SP1 for Cesium之移动实体对象

作者&#xff1a;nannan 目录 前言 一、代码思路 1.1 绘制面实体对象 1.2 鼠标左键按下事件 1.3 鼠标移动事件 1.4 鼠标左键抬起事件 二、运行效果 三、注意事项 前言 SuperMap 官网三维前端范例 编辑线面&#xff0c;可以对面实体对象的节点进行增加、删除以及修改位置…

部署笔记:文件句柄调整和磁盘分区 02

系统默认是1024&#xff0c;基本不够&#xff0c;会报“too many open files”的错误。因此需要调整。 系统文件句柄数调整 # 编辑打开文件&#xff0c;在文末追加两行配置 vim /etc/security/limits.conf # 需要添加的配置&#xff0c;注意别漏了前面的*号 # * 指所有用户、…

linux 下 C++ 与三菱PLC 通过MC Qna3E 二进制 协议进行交互

西门子plc 有snap7库 进行交互&#xff0c;并且支持c 而且跨平台。但是三菱系列PLC并没有现成的开源项目&#xff0c;没办法只能自己拼接&#xff0c;我这里实现了MC 协议 Qna3E 帧&#xff0c;并使用二进制进行交互。 #pragma once#include <stdio.h> #include <std…

第21章_瑞萨MCU零基础入门系列教程之事件链接控制器ELC

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

TableConvert-免费在线表格转工具 让表格转换变得更容易

在线表格转工具TableConvert TableConvert 是一个基于web的免费且强大在线表格转换工具&#xff0c;它可以在 Excel、CSV、LaTeX 表格、HTML、JSON 数组、insert SQL、Markdown 表格 和 MediaWiki 表格等之间进行互相转换&#xff0c;也可以通过在线表格编辑器轻松的创建和生成…

A股风格因子看板 (2023.09 第03期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格暴露等。 今日为该因子跟踪第03期&#xff0c;指数组合数据截止日2023-08-31&#xff0c;要点如下 近1年A股风格因子检验统…

第四范式通过聆讯,AI上市公司将再添薪火

四次递表之后&#xff0c;估值超过200亿元的AI独角兽第四范式近日如愿通过港交所聆讯&#xff0c;即将成为资本市场AI皇冠上的又一颗明珠。 第四范式成立于2014年&#xff0c;历经11轮融资&#xff0c;不仅股东阵容豪华&#xff0c;也在商业化层面进展可观。今年4月底&#xf…

华为云云耀云服务器L实例评测|老用户回归的初印象

华为云云耀云服务器L实例评测&#xff5c;老用户回归的初印象 前言一、新面孔1. 云耀云服务器2. 服务器特色 二、上手感官体验1. 性价比感受2. 推荐宝塔面板3. CloudShell登录4. 安全性 总结 前言 其实笔者接触华为云已经很久了&#xff0c;第一次使用的云服务器就是华为云。当…

【计算机网络】什么是WebSocket?

目录 WebSocket简介协议优点使用场景 WebSocket WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信&#xff0c;位于OSI模型的应用层。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务器主动向客户端推送数据。在WebSocket API中&a…

电脑死机的时候,CPU到底在做什么?

电脑死机&#xff0c;应该每个接触计算机的小伙伴都经历过吧。 尤其是早些年&#xff0c;电脑配置还没现在这么高的时候&#xff0c;多开几个重量级应用程序&#xff0c;死机就能如约而至&#xff0c;就算你把键盘上的CTRLALTDELETE按烂了&#xff0c;任务管理器也出不来&…

[移动通讯]【Carrier Aggregation-4】【LTE-4】

前言&#xff1a; 推荐两个在线工具 UECapabilityInformation Decoder: https://www.sqimway.com/ue_capa.php FGI Decoder: http://howltestuffworks.blogspot.com/2016/11/lte-feature-group-indicators-decoder.html 参考&#xff1a; 载波聚合&#xff08;CA&#xff09;…

PyTorch实战-实现神经网络图像分类基础Tensor最全操作详解(二)

前言 PyTorch可以说是三大主流框架中最适合初学者学习的了&#xff0c;相较于其他主流框架&#xff0c;PyTorch的简单易用性使其成为初学者们的首选。这样我想要强调的一点是&#xff0c;框架可以类比为编程语言&#xff0c;仅为我们实现项目效果的工具&#xff0c;也就是我们…