TypeScript中的泛型

前言

TypeScript想必大家也很熟了,今天主要介绍一下TS中的泛型,泛型也是一种强大的工具,它是可以在定义函数、类和接口时使用参数化类型,使得这些实体可以适用于多种数据类型而不失类型安全性。泛型的引入让开发者能够编写更加灵活和可重用的代码,同时保持静态类型检查的好处。

1. 什么是泛型?

泛型是一种在编程语言中提供抽象类型的机制,可以在使用时指定具体的类型。通过使用泛型,开发者可以编写具有通用性的代码,而不必提前指定具体的数据类型。这样的特性在处理集合、算法和数据结构时尤为有用,因为使用泛型代码可以在不同的数据类型上工作,提高了代码的灵活性和可重用性。

2. 如何使用泛型?

2.1 函数中的泛型

在函数定义中使用泛型时,可以在函数名称后的尖括号中指定泛型参数,然后在函数体中使用这个泛型参数来描述函数参数的类型或返回值的类型。例如:

function identity<T>(arg: T): T {return arg;
}let result = identity<string>("Hello, TypeScript!");
// result 的类型为 string
2.2 类中的泛型

类中也可以使用泛型,使得类的实例可以支持多种数据类型。例如:

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

在接口中使用泛型可以使接口适用于不同类型的对象。例如:

interface Pair<T, U> {first: T;second: U;
}let pair: Pair<number, string> = { first: 1, second: "two" };
// pair 的类型为 Pair<number, string>

3. 使用场景

3.1 提高代码的重用性

泛型使得代码可以在不同的数据类型上工作,从而提高了代码的重用性。通过编写具有通用性的函数和类,可以减少重复代码的量,同时保持代码的类型安全性。

3.2 集合操作

在处理集合类型(如数组、列表)时,泛型可以使算法更加灵活。例如,可以编写一个通用的函数来查找数组中的最大值,而不必为每种数据类型都编写一个专门的函数。

function findMax<T>(arr: T[]): T | undefined {if (arr.length === 0) {return undefined;}let max = arr[0];for (let i = 1; i < arr.length; i++) {if (arr[i] > max) {max = arr[i];}}return max;
}let maxNumber = findMax([1, 5, 3, 9, 2]);
// maxNumber 的类型为 number | undefined
3.3 类型安全的抽象数据结构

通过泛型,可以创建具有类型安全的抽象数据结构,这对于在编译时捕获错误非常有帮助。例如,可以编写一个通用的堆栈类:

class Stack<T> {private items: T[] = [];push(item: T): void {this.items.push(item);}pop(): T | undefined {return this.items.pop();}
}let stringStack = new Stack<string>();
stringStack.push("first");
stringStack.push("second");
let topItem = stringStack.pop();
// topItem 的类型为 string | undefined

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

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

相关文章

2024年哪款便签软件是手机电脑同步的?

在繁忙的生活、工作和学习中&#xff0c;我们时常面临各种琐事和任务&#xff0c;需要随时记录、提醒&#xff0c;以保持高效的生活节奏。比如&#xff0c;突然想到的灵感、重要的工作计划、紧急的购物清单&#xff0c;都需要一个便利的便签工具来随手记录。特别是在多终端使用…

vue2 el-form 两个时间框(第一个时间框是只能选择当前时间,之前的是不允许选择,第二个时间框是第一个时间的当前的时间后30天后可以选择的)

<template><div id"app"><el-form :model"form"><el-form-item label"预签时间"><el-date-picker v-model"form.t2" type"date" placeholder"选择预签时间" changepreSigning/><…

RT-DETR算法优化改进:上采样算子 | 超轻量高效动态上采样DySample,效果秒杀CAFFE,助力小目标检测

💡💡💡本文独家改进:一种超轻量高效动态上采样DySample, 具有更少的参数、FLOPs,效果秒杀CAFFE和YOLOv8网络中的nn.Upsample 💡💡💡在多个数据集下验证能够涨点,尤其在小目标检测领域涨点显著。 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/…

HTTP传输文件和FTP传输文件的相关简介

服务器数据安全一直以来是网络工作中的重中之重&#xff0c;服务器文件传输方式也是需要重视的一方面。而服务器传输文件的方式有很多&#xff0c;比如HTTP传输、FTP传输、BT传输、SFTP传输等等。今天就简单来介绍下HTTP传输文件和FTP传输文件的相关特点。 HTTP传输是一种常见…

C++ 音视频流媒体浅谈

C流媒体开发 今天就浅浅聊一下C流媒体开发 流媒体开发中最常见的是FFmpeg&#xff08;编解码器&#xff09; 业务逻辑主要是播放器了&#xff08;如腾旭视频 爱奇艺等等&#xff09; FFmpeg是一个开源的音视频处理工具集&#xff0c;可以用于处理、转换和流媒体传输音视频…

「HarmonyOS」EventHub事件通知详细使用方法

需求背景&#xff1a; 在开发过程中&#xff0c;肯定会出现触发特定事件&#xff0c;需要全局进行通知&#xff0c;与之相关的部分进行执行相应的修改方法。举个例子&#xff1a;修改了用户个人昵称&#xff0c;需要进行全局通知&#xff0c;在涉及昵称的部分收到通知后&#…

Hive核心优化

数据采样 分桶表概述: 分桶就是分文件, 在创建表的时候, 指定分桶字段, 并设置分多少个桶, 在添加数据的时候, hive会根据设置分桶字段, 将数据划分到N个桶(文件)中, 默认情况采用HASH分桶方案 , 分多少个桶, 取决于建表的时候, 设置分桶数量, 分了多少个桶最终翻译的MR也就会运…

机器翻译在各领域的应用

你知道机器翻译有哪些应用领域吗&#xff1f; ​​机器翻译在多个领域都有应用场景&#xff0c;最常见的是商业领域。​机器翻译在商业领域中的应用如下&#xff1a; ​ 产品说明书&#xff1a;通过机器翻译&#xff0c;用户可以快速获取产品说明书中的内容&#xff0c;提高…

广州标点医药信息-米内网数据及咨询服务企业全方位解析!

米内网&#xff08;MENET&#xff09;原名中国医药经济信息网&#xff0c;由广州标点医药信息股份有限公司主办&#xff0c;2010年10月28日更名为“米内网”&#xff0c;上线初始主打医药销售数据库&#xff0c;经过十余年的迭代发展&#xff0c;现已成为国内主要的医药健康信息…

计网——应用层

应用层 应用层协议原理 网络应用的体系结构 客户-服务器&#xff08;C/S&#xff09;体系结构 对等体&#xff08;P2P&#xff09;体系结构 C/S和P2P体系结构的混合体 客户-服务器&#xff08;C/S&#xff09;体系结构 服务器 服务器是一台一直运行的主机&#xff0c;需…

数据结构·复杂度讲解

1. 什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的集合。 数据结构是用来在内存中管理数据的&#xff0c;类似的&#xff0c;我们熟悉的文件或数据库是在硬盘中管理数据的。内存中的数据是带点…

2024美赛数学建模所有题目思路分析

美赛思路已更新&#xff0c;关注后可以获取更多思路。并且领取资料 C题思路 首先&#xff0c;我们要理解势头是什么。简单来说&#xff0c;势头是一方在比赛中因一系列事件而获得的动力或优势。在网球中&#xff0c;这可能意味着连续赢得几个球&#xff0c;或是在比赛的某个关…

【2024美赛】B题(中英文):搜寻潜水器Problem B: Searching for Submersibles

【2024美赛】B题&#xff08;中英文&#xff09;&#xff1a;搜寻潜水器Problem B: Searching for Submersibles 写在最前面2024美赛翻译 —— 跳转链接 中文赛题问题B&#xff1a;搜寻潜水器你的任务是&#xff1a; 词汇表 英文赛题Problem B: Searching for SubmersiblesYour…

AI:122-基于深度学习的电影场景生成与特效应用

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

详解 Prim 算法的实现

一、算法思路 Prim 算法是用来求最小生成树的&#xff0c;它的思想也有点类似于贪心——逐个将离当前集合最近的点加入到集合中&#xff0c;直至发现图不连通或所有点都被加到集合中&#xff0c;算法即宣告终止。它的具体做法是&#xff1a; step 1&#xff1a;初始时&#xf…

el-tree setChecked实现父子不联动

2024.1.29今天我学习了如何使用el-tree的setChecked用法&#xff0c;在使用el-tree的时候我们需要进行回显情况&#xff1a;如&#xff1a; [{id:1,name:张三, children:[{id:1-1,name:张三四},{id:1-2,name:张三五}]}, {id:2,name:李四}] 如果我们存id&#xff1a; [1,2]&a…

ArcGIS空间分析方法计算城市气体扩散

基于ArcGIS提供的空间分析方法,计算城市气体扩散涉及的密闭空间和开敞空间。 文章目录 一、实验描述二、实验过程1. 加载数据2.符号化3. 建立缓冲区4. 提取密闭空间(建筑)5.提取开敞区域6. 计算开敞空间面积三、注意事项一、实验描述 在对城市空间进行分析时,可将城市空间…

基于VMware和Unbuntu18.04编译 嘉立创·泰山派 Linux SDK

主机硬件要求 内存最少32G 硬盘腾出200-500G&#xff0c;虽然编译最终占了73G&#xff0c;但富余一些以后可以搞别的方便 操作系统win7/10/11 VMware 安装 1.去vmware官网下载&#xff1a;https://customerconnect.vmware.com/cn/downloads/info/slug/desktop_end_user_comp…

小红书种草商品笔记违规,有哪些原因?

发布小红书笔记之后迟迟没有流量&#xff0c;内容过关但是浏览量突然变低是什么原因?如果出现上述情况&#xff0c;就可能是商品笔记被限制了。那么该如何重新获得流量呢?今天我们就来分享下小红书种草商品笔记违规&#xff0c;有哪些原因&#xff1f; 一、怎样判断被限流了 …

网络原理-TCP/IP(4)

TCP原理 滑动窗口 之前我们讲过了确认应答策略,对发送的每一个数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段. 确认应答,超时重传,连接管理这样的特性都是为了保证可靠运输,但就是付出了传输效率(单位时间能传输数据的多少)的代价,因为确认应答机制导致了时间大…