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:列表的滚 ...
随机推荐
- webpack原理(3):Tapable源码分析及钩子函数作用分析
webpack本质上是一种事件流的机制,它的工作流程就是将各个插件串联起来,而实现这一切的核心就是Tapable,webpack中最核心的负责编译的Compiler和负责创建bundles的Compi ...
- 如何打造企业专属 A/B 平台?火山引擎 DataTester 开放平台技术揭秘
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 企业为什么需要开放平台 开放平台对于企业与业务来说,做到的不仅是能力的开放.生态的开放,与此同时还要能提供完善的业 ...
- IDEA画图神器 PlantUML
PlantUML 是一款开源的UML图绘制工具,支持通过文本来生成图形,使用起来非常高效.可以支持时序图.类图.对象图.活动图.思维导图等图形的绘制. 下面使用PlantUML来绘制一张流程图,可以实 ...
- 鸿蒙HarmonyOS实战-工具安装和Helloworld案例
前言 HarmonyOS是华为自主开发的操作系统,它在2020年9月正式发布.它最初被称为鸿蒙OS,后来更名为HarmonyOS.HarmonyOS旨在提供一种可在各种设备上无缝运行的统一操作系统,包 ...
- 玩转Python:在Python中处理表格数据,几个非常流行且功能强大的库
在Python中处理表格数据,有几个非常流行且功能强大的库.以下是一些最常用的库及其示例代码: 1. Pandas Pandas是一个开放源代码的.BSD许可的库,为Python编程语言提供高性能.易 ...
- 成为一个合格程序员所必备的三种常见LeetCode排序算法
排序算法是一种通过特定的算法因式将一组或多组数据按照既定模式进行重新排序的方法.通过排序,我们可以得到一个新的序列,该序列遵循一定的规则并展现出一定的规律.经过排序处理后的数据可以更方便地进行筛选和计 ...
- nginx: [emerg] unknown directive "?server" in /etc/nginx/conf.d/nginx.conf:1
问题描述:启动nginx的时候报错 1.nginx: [warn] the "user" directive makes sense only if the master proc ...
- 【辅助工具】Apifox
注意事项 需要刷新权限 请求方式需要对应
- #2069:Coin Change(完全背包)
Problem Description Suppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cen ...
- Eight HDU - 1043 (反向搜索 + 康拓展开 / A* + BFS / IDA* )
题目描述 简单介绍一下八数码问题: 在一个3×3的九宫格上,填有1~8八个数字,空余一个位置,例如下图: 1 2 3 4 5 6 7 8 在上图中,由于右下角位置是空的,你可以移动数字,比如可以将数字 ...