typescript 中的泛型

泛型:解决 类、接口、方法的复用性、以及对不特定数据类型的支持

           传入的参数与返回参数类型一致

泛型函数

// T表示泛型,具体什么类型是调用这个方法的时候决定的
function getData<T>(value: T): T {return value
}
getData<number>(123) //参数必须是number
getData<string>('123')

 泛型类

//支持返回数字和字符串两种类型,通过类的泛型实现
class MinClass<T> {public list: T[] = [];add(num: T) {this.list.push(num)}min(): T {var minNum = this.list[0];for (let i = 0; i < this.list.length; i++) {if (minNum > this.list[i]) {minNum = this.list[i]}}return minNum}
}
var m = new MinClass<number>() // 实例化类,并且指定了类的T代表的类型是number
m.add(2)
m.add(5)
m.add(10)
console.log(m.min());

把类当作参数来约束数据传入的类型


class User {username: string | undefined;password: string | undefined
}
class MysqlDb {add(user: User): boolean {console.log(user, 'user');return true}
}
var u = new User()
u.username = 'w'
u.password = '1'var Db = new MysqlDb()
Db.add(u)// 操作泛型类
class TMysqlDb<T> {add(info: T): boolean {console.log(info, 'info');return true}
}
// 给user添加数据
// 定义一个TUser类,进行映射
class TUser {username: string | undefined;password: string | undefined
}
var t = new TUser()
t.username = 't'
t.password = '6'var tb = new TMysqlDb<TUser>()
tb.add(t)class ArticleCate {title: string | undefined;desc: string | undefined;status: number | undefinedconstructor(params: {title: string | undefined,desc: string | undefined,status: number | undefined}) {this.title = params.titlethis.desc = params.descthis.status = params.status}
}
var a = new ArticleCate({ title: '分类', desc: '描述', status: 0 })
var td = new TMysqlDb<ArticleCate>()
td.add(a)

泛型接口

// 方法1
interface ConfigFn {<T>(value: T): T
}
var getData: ConfigFn = function <T>(value: T): T {return value
}
console.log(getData<string>('name'));// 方法2
interface ConfigFn<T> {(value: T): T
}
function getData<T>(value: T): T {return value
}
var myGetData: ConfigFn<string> = getData
console.log(myGetData('20'));

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

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

相关文章

Linux生成密钥对并配置免密访问

(1) 在客服端生成密钥对 先生成私钥&#xff0c;再生成公钥 ssh-keygen ---生成密钥对命令 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): --保存密钥对路径 Enter passphrase (empty for no passphrase): 输入…

腾讯突然宣布,微信鸿蒙版要来了!

今年初&#xff0c;华为宣布HarmonyOS NEXT命名为“鸿蒙星河版”&#xff0c;并计划在二季度启动开发者 Beta 计划&#xff0c;四季度发布商用正式版。 消息一出&#xff0c;不少人为之振奋。 鸿蒙星河版因不再兼容安卓开源应用&#xff0c;仅支持鸿蒙内核和系统的应用&#x…

Penpad再获 Presto Labs 投资,Scroll 生态持续扩张

Penpad是Scroll生态的LaunchPad平台&#xff0c;其整计划像收益聚合器以及RWA等功能于一体的综合性Web3平台拓展&#xff0c;该平台在近期频获资本市场关注&#xff0c;并获得了多个知名投资者/投资机构的支持。 截止到本文发布前&#xff0c;Penpad已经获得了包括Scroll联合创…

(三)JSP教程——JSP动作标签

JSP动作标签 用户可以使用JSP动作标签向当前输出流输出数据&#xff0c;进行页面定向&#xff0c;也可以通过动作标签使用、修改和创建对象。 <jsp:include>标签 <jsp:include>标签将同一个Web应用中静态或动态资源包含到当前页面中。资源可以是HTML、JSP页面和文…

静态库和动态库的了解

静态库和动态库是程序开发中常用的两种库文件类型&#xff0c;它们各有特点&#xff0c;适用于不同的场景。下面是对它们的基本概念、优缺点以及使用场景的概述&#xff1a; 静态库 概念&#xff1a;静态库是一组预先编译好的函数和数据的归档集合&#xff0c;通常以.a&#x…

B端UX/UI设计面试作品集分层源文件figmasketch模板

当您考虑找工作时&#xff0c;是否曾质疑过项目复盘作品集的重要性&#xff1f;实际上&#xff0c;一份精心准备的项目复盘作品集对于求职者来说具有无可估量的价值&#xff0c;特别是对于设计师这一职业领域。 以下所述或许对您而言已非陌生。您的作品集应当成为您专业技能与…

为什么BGP用于建立对等体关系的环回口主机路由通过BGP传递不优

BGP用于建立对等体关系的环回口主机路由通过BGP传递不优 问题描述&#xff1a; R1和R2通过环回口建立BGP对等体关系 R1在BGP进程中&#xff0c;又network了该环回口地址的主机路由 此时&#xff0c;在R2的bgp routing-table&#xff08;BGP协议路由表&#xff09;中&#x…

笔记本连接不上远程桌面,笔记本无法连接远程桌面的可能原因及解决方法

在使用远程桌面功能时&#xff0c;笔记本无法成功连接的情况可能由多种原因引起。为了有效地解决这个问题&#xff0c;我们需要逐一排查这些可能的原因&#xff0c;并采取相应的解决措施。 首先&#xff0c;网络连接稳定性是远程桌面连接成功的关键。请确保笔记本和远程计算机之…

Vue2之路由跳转传参中文问题处理

Vue2之路由跳转传参中文问题处理 文章目录 Vue2之路由跳转传参中文问题处理1. 问题描述1. 当前vue组件2. 跳转到的vue组件3. 出现的错误 2. 解决方法1. 当前vue组件2. 跳转到的vue组件 1. 问题描述 在el-table中的记录列表中放置了一个 操作按钮&#xff0c;点这个按钮时可以新…

android 获取唯一设备id

git项目地址&#xff1a;GitCode - 开发者的代码家园 集成步骤&#xff1a; 1、 allprojects {repositories { ~~~~...maven { url https://jitpack.io }} } 2、 dependencies {implementation com.github.z244370114:DeviceLibray:1.0.4 } 3、获取唯一id (1)需要在…

RabbitMQ之基础入门

在 AMQP 中&#xff0c;Producer 将消息发送到 Exchange &#xff0c;再由 Exchange 将消息路由到一个或多个 Queue 中&#xff08;或者丢弃&#xff09;。Exchange 根据 Routing Key 和 Binding Key 将消息路由到 Queue &#xff0c;目前提供了 Direct、Topic、Fanout、Header…

新媒体运营面试必备高频话术!建议收藏

01 请简单做个自我介绍 回答思路&#xff1a; 在面试前&#xff0c;面试官往往已经看过你的简历&#xff0c;所以要说简历上没有的。在表述的时候&#xff0c;可以按照以下3 点来讲&#xff1a; 热爱&#xff1a;体现你对行业和岗位的热爱 匹配&#xff1a;体现你的经历与岗…

github提交不了的问题

开了VPN提交的时候提示这个报错 是需要这两个端口号一致&#xff0c;就能提交了

线程池

文章目录 普通线程池自定义线程池 普通线程池 //创建线程池&#xff0c;不指定上限 ExecutorService pool1 Executors.newCachedThreadPool(); //创建线程池&#xff0c;指定上限 ExecutorService pool1 Executors.newFixedThreadPool(5); --------------------------------…

Material Studio 计算分子静电力、电荷密度以及差分电荷密度

1.先打开Material Studio导入要计算的分子cif文件或者mol文件&#xff0c;直接Flie-Import 2.高斯几何优化一下结构&#xff0c;参数按照我的设置就行&#xff0c;一般通用&#xff0c;后面出问题再调整 3.点完Run后会跳出很多计算过程&#xff0c;不用管&#xff0c;等他计算完…

ObjectUtils.isNotEmpty和StringUtils.isNotBlank有什么区别

ObjectUtils.isNotEmpty() 和 StringUtils.isNotBlank() 分别属于 Apache Commons Lang 库中的两个不同工具类的方法&#xff0c;它们用于不同的场景和目的&#xff1a; ObjectUtils.isNotEmpty()&#xff1a; 这个方法通常用来判断一个对象是否非空&#xff0c;但它并非专门…

GO语言核心30讲 实战与应用 (第二部分)

原站地址&#xff1a;Go语言核心36讲_Golang_Go语言-极客时间 一、sync.WaitGroup和sync.Once 1. sync.WaitGroup 比通道更加适合实现一对多的 goroutine 协作流程。 2. WaitGroup类型有三个指针方法&#xff1a;Wait、Add和Done&#xff0c;以及内部有一个计数器。 (1) Wa…

【FL常用插件#1】Ozone11臭氧的安装和使用

本文内容收集自互联网&#xff0c;仅供个人学习参考使用&#xff0c;不允许用于商业用途&#xff0c;造成的侵权行为与本文作者无关 安装 VST2、VST3、AAX和NKS是音频技术界常见的几种插件格式&#xff0c;它们在功能和兼容性上有所不同&#xff1a; VST2 (Virtual Studio Tec…

python环境下labelImg图片标注工具的使用

labelimg GitHub地址 python环境下labelImg图片标注工具的使用 1. 写在开头2. 如何使用2.1安装2.2 启动2.2.1 先启动后设置标注的目录2.2.2 指定标注的目录和预设置的标签 2.3 设置自动保存和显示类别。2.4 保存文件类型2.5 [快捷键](https://github.com/HumanSignal/labelImg…

FastDFS-单机扩容

描述 周一上班收到用户反馈系统异常&#xff0c;紧急排查日志发现报错&#xff1a;FdfsServerException:错误:28&#xff0c;错误信息:没有足够的存储空间。 解决 根据异常信息判断是文件服务器可用内存不够了&#xff0c;首先登录文件服务器&#xff0c;使用df -h命令查看一…