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>详细讲解的更多相关文章

  1. Java中泛型的详细解析,深入分析泛型的使用方式

    泛型的基本概念 泛型: 参数化类型 参数: 定义方法时有形参 调用方法时传递实参 参数化类型: 将类型由原来的具体的类型参数化,类似方法中的变量参数 类型定义成参数形式, 可以称为类型形参 在使用或者 ...

  2. C#核心语法讲解-泛型(详细讲解泛型方法、泛型类、泛型接口、泛型约束,了解协变逆变)

    泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具 ...

  3. C#核心语法-泛型(详细讲解泛型方法、泛型类、泛型接口、泛型约束,了解协变逆变)

    泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具 ...

  4. java中log4j用法详细讲解和一些小总结

    0.Log4j的用法详解 首先,在项目中的classes 中新建立一个log4j.properties文件即可: 在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义.定义步骤就是对 ...

  5. Unix操作系统中UUCP知识详细讲解

    导读 Unix操作系统有很多值得学习的地方,这里我们主要介绍Unix操作系统中的uucp,大家一起来学习下吧!UUCP系统是一组程序,完成文件传输,执行系统之间的命令,维护系统使用情况的统计,保护安全 ...

  6. 关于ios中得路径详细讲解

    利用create groups for any added folders 这样的方式表示的是将所有的资源都放在资源包得路径下,没有层次的概念利用create folder references fo ...

  7. 在Struts2中集成Spring详细讲解

    Spring的官方定义是:一个轻量级的IoC和Aop容器框架,它使用了一种叫做依赖注入的技术. 所谓依赖注入,就是指将创建对象以及协议依赖对象之间合作的责任从对象自身中转移到"工厂" ...

  8. Python中编码的详细讲解

    看这篇文章前,你应该已经知道了为什么有编码,以及编码的种类情况 ASCII 占1个字节,只支持英文 GB2312 占2个字节,支持6700+汉字 GBK GB2312的升级版,支持21000+汉字 S ...

  9. PHP中foreach用法详细讲解

    1.foreach是什么? foreach是PHP的一种语法结构,其实就是一个工具,(工具:就是工作的时候用到的器具),那么在程序开发过程中,为了达到程序效果,就用到了foreach. 2.如何用? ...

  10. flutter中ListView的详细讲解

    1.ListView的简单介绍 ListView是最常用的可以滚动组件之一, 它可以沿一个方向进行线性排列所有的子组件. 下面是ListView的属性值介绍: scrollDirection:列表的滚 ...

随机推荐

  1. 教你如何用Keras搭建分类神经网络

    摘要:本文主要通过Keras实现了一个分类学习的案例,并详细介绍了MNIST手写体识别数据集. 本文分享自华为云社区<[Python人工智能] 十七.Keras搭建分类神经网络及MNIST数字图 ...

  2. java并发编程(1):Java多线程-基本线程类-基础知识复习笔记

    复习资料:<同步与异步:并发/并行/进程/线程/多cpu/多核/超线程/管程 > 基本线程类 基本线程类 基本线程类指的是Thread类,Runnable接口,Callable接口 继承T ...

  3. MySQL Select 语句执行顺序

    一条 SQL 查询语句结构如下: SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN ...

  4. Flink异步IO

    本文讲解 Flink 用于访问外部数据存储的异步 I/O API. 对于不熟悉异步或者事件驱动编程的用户,建议先储备一些关于 Future 和事件驱动编程的知识. 对于异步 I/O 操作的需求 在与外 ...

  5. 鸿蒙HarmonyOS实战-ArkTS语言(基本语法)

    一.ArkTS语言基本语法 1.简介 HarmonyOS的ArkTS语言是一种基于TypeScript开发的语言,它专为HarmonyOS系统开发而设计.ArkTS语言结合了JavaScript的灵活 ...

  6. linux tar解压命令总结

    把常用的tar解压命令总结下,当作备忘: -c:建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可 ...

  7. 地图区域大数据量 marker 坐标点高效抽稀算法

    按网上的思路一般要写双层循环,第一层循环遍历点集合,时间复杂度为O(N),第二层循环遍历结果集,逐一计算距离,距离小于阈值的不加入结果集,距离大于阈值的加入结果集,时间复杂度为O(M),双层循环总时间 ...

  8. Codeforces 1326A Bad Ugly Numbers (思维)

    Codeforces 1326A Bad Ugly Numbers 看完题目,第一直觉,质数肯定满足题意,再看数据范畴,\(1≤n≤10^5\), 质数线性筛仅能做到 n=7 的情况,即处理到1000 ...

  9. v-html会导致xss攻击

  10. vscode prettier保存代码时自动格式化

    https://blog.csdn.net/qq_37815596/article/details/109225879