TypeScript中泛型<T>详细讲解
1.泛型
在定义函数或者接口或者类的时候
不能预先确定要使用的数据类型
而是在使用函数、接口、或者类的时候才能够确定数据类型
这个时候我们就需要使用的是泛型
2.功能描述
我们需要实现一个方法,方法中有两个参数,
第一参数表示的是传入的内容值,第二个参数表示的长度或者个数
根据内容值产生对应个数,然后存放在数组中,最后返回来
3.分析上述功能
由于传入的内容值可能是字符串,也有可能是数字,也有可能是布尔类型的;
只有在传递的时候我们才知道数据的类型
这个时候我们就需要使用泛型<T>
4.实现上述功能
function getArr<T>(cont:T, len:number):T[]{
// const arr:T[]=[] //这是一个泛型数组 或者这样写
const arr: Array<T> = []; //泛型必须要有一个初始值
for (let i = 0; i < len;i++) {
arr.push(cont)
}
return arr
}
const arr1 = getArr<number>(11.1, 3);
console.log(arr1)
5.简单说明上述代码
function getArr<T> 表示该函数中的类型值是不确定的,
只有在传递的时候才知道,因此使用了泛型。
cont:T 内容值是泛型
function getArr<T>(cont:T, len:number) :T[]{ }
返回来的是一个数组泛型,数组中值类型不确定
const arr: Array<T> = []; 和 const arr:T[]=[]
声明一个数组泛型,必须给一个初始值。【重要】
const arr1 = getArr<number>(11.1, 3);
传递的类型值是数字
6.函数中有多个泛型的参数
// 多个泛型参数的函数:函数中有多个泛型的参数
function getMsg<K, T>(cont1:K, cont2:T):[K,T] {
return [cont1,cont2]
}
const arr = getMsg<string, number>('哈哈', 2);
7.简单说明一下上述的代码
由于第一个类型的值和第二个类型的值都是不确定的,
所以有了泛型
function getMsg<K, T>(cont1:K, cont2:T):[K,T] { }
在使用的时候const arr = getMsg<string, number>('哈哈', 2);
我们的第一个值是字符串,第二个值是数字
接口中泛型设置默认值
// 接口中泛型设置默认值为对象
interface BackResult<T = {}> {
code: number,
back:T
}
let backData: BackResult = {
code: 200,
back: {
data: [{name:'张三', age:100}]
}
}
接口中泛型数据类型
// 接口中泛型设置数据类型
interface BackResult<T=number> {
code: number,
back:T
}
let backData: BackResult = {
code: 200,
back: 100
}
接口中泛型数据类型,如果用户传递了,以用户的类型为准
// 接口中泛型设置默认数据类型,如果你没有传递参数,默认类型就是数字
interface BackResult<T=number> {
code: number,
back:T
}
// 这里我声明了数据类型,泛型的类型是字符串
let backData: BackResult<string> = {
code: 200,
back:'操作成功'
}
泛型T使用extends做约束
// 泛型T的数据类型只接字符串类型和数字类型的
interface Person<T extends string | number, G > {
name: T;
other:G
}
// 这里的第一个参数是:字符串类型
let obj1: Person<string, number > = {
name: '张三',
other:168,
}
// // 这里的第一个参数是:数组类型
let obj2: Person<number, number> = {
name: 12,
other: 168,
}
使用 type 做别名优化 上面的代码
type strOrnum = string | number
// 泛型T的数据类型只接字符串类型和数字类型的
interface Person<T extends strOrnum, G > {
name: T;
other:G
}
// 这里的第一个参数是:字符串类型
let obj1: Person<string, number > = {
name: '张三',
other:168,
}
// // 这里的第一个参数是:数组类型
let obj2: Person<number, number> = {
name: 12,
other: 168,
}
TypeScript中泛型<T>详细讲解的更多相关文章
- Java中泛型的详细解析,深入分析泛型的使用方式
泛型的基本概念 泛型: 参数化类型 参数: 定义方法时有形参 调用方法时传递实参 参数化类型: 将类型由原来的具体的类型参数化,类似方法中的变量参数 类型定义成参数形式, 可以称为类型形参 在使用或者 ...
- C#核心语法讲解-泛型(详细讲解泛型方法、泛型类、泛型接口、泛型约束,了解协变逆变)
泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具 ...
- C#核心语法-泛型(详细讲解泛型方法、泛型类、泛型接口、泛型约束,了解协变逆变)
泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具 ...
- java中log4j用法详细讲解和一些小总结
0.Log4j的用法详解 首先,在项目中的classes 中新建立一个log4j.properties文件即可: 在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义.定义步骤就是对 ...
- Unix操作系统中UUCP知识详细讲解
导读 Unix操作系统有很多值得学习的地方,这里我们主要介绍Unix操作系统中的uucp,大家一起来学习下吧!UUCP系统是一组程序,完成文件传输,执行系统之间的命令,维护系统使用情况的统计,保护安全 ...
- 关于ios中得路径详细讲解
利用create groups for any added folders 这样的方式表示的是将所有的资源都放在资源包得路径下,没有层次的概念利用create folder references fo ...
- 在Struts2中集成Spring详细讲解
Spring的官方定义是:一个轻量级的IoC和Aop容器框架,它使用了一种叫做依赖注入的技术. 所谓依赖注入,就是指将创建对象以及协议依赖对象之间合作的责任从对象自身中转移到"工厂" ...
- Python中编码的详细讲解
看这篇文章前,你应该已经知道了为什么有编码,以及编码的种类情况 ASCII 占1个字节,只支持英文 GB2312 占2个字节,支持6700+汉字 GBK GB2312的升级版,支持21000+汉字 S ...
- PHP中foreach用法详细讲解
1.foreach是什么? foreach是PHP的一种语法结构,其实就是一个工具,(工具:就是工作的时候用到的器具),那么在程序开发过程中,为了达到程序效果,就用到了foreach. 2.如何用? ...
- flutter中ListView的详细讲解
1.ListView的简单介绍 ListView是最常用的可以滚动组件之一, 它可以沿一个方向进行线性排列所有的子组件. 下面是ListView的属性值介绍: scrollDirection:列表的滚 ...
随机推荐
- HTTP请求转发那些事:你可能不知道的Hop-by-hop Headers和End-to-end Headers
摘要:不是所有的web容器都能帮助开发者屏蔽hop-by-hop headers,有些容器反而允许开发者自定义hop-by-hop headers来实现更大程度的灵活性. 本文分享自华为云社区< ...
- DarkMode(4):css滤镜 颜色反转实现深色模式
在<DarkMode(1):产品应用深色模式分析>提过,单纯反转是不行的.但是,把不需要反转的,在反转过来.或者用js,给想要反转的,加上反转样式,再对其他的做微调.这样个人觉得,开发成本 ...
- iOS上架审核宝典:如何避免被拒一次提交成功
Xcode 摘要:本文整理了iOS上架需要注意的事项,以帮助从事iOS开发和App运营的朋友们避免审核被拒的困扰.通过遵循这些指南,我们可以在一次提交中成功地将应用上架,并节省宝贵的时间和精力. 引言 ...
- 火山引擎ByteHouse:如何用OLAP引擎提升数字营销效果?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着市场竞争的加剧,企业对数字营销投入的效果监测和优化需求日益增强,营销实时监控也成为企业提升运营效率的重要手 ...
- 断点续传(上传)Java版
PostMan 客户端调用部分见,断点续传(上传)C#版 1. 客户每次上传前先获取一下当前文件已经被服务器接受了多少 2. 上传时设定偏移量,跳过服务器已收到的长度 @SpringBootTest ...
- Make、Makefile、Cmake、QMake 的区别
本博文的简述or解决问题? make makefile cmake qmake都是什么,有什么区别? 查了一下好像是编译用的,既然是编译为什么我们不用g++. javac 来编译呢?我猜答案是方便一点 ...
- 数据结构——AVL树
AVL树是一种特殊的二叉查找树,其特征在于:对所有节点来说,其左子树和右子树间的高度差小于等于1.本文简要总结下AVL树的几种基本操作. 节点结构体定义 typedef struct Node_s { ...
- ZOJ - 1610 区间修改+暴力单点查询
一.内容 题意:给定[1,8000]区间,给定n组操作,每次将一段区间修改成某种颜色(对上一次颜色进行覆盖),最后问你能看到多少种颜色,且每种颜色有多少段. 二.思路 题目给定的区间是(x, y]左开 ...
- git速查
- uni-app阿里图标引用
@font-face { font-family: "iconfont"; /* Project id 2566540 */ src: url('~@/static/fonts/i ...