泛型

给函数或者属性定义类型的时候,类型是固定的,当业务发生变动时可能不好维护,例如:函数类型固定为string,后续需求更改不好维护,比如需要传入number类型,那么这个函数就不适用了

function add( val : string) : string{
return val
}

为了解决这个问题,可以使用泛型,在调用的时候确定它是什么类型

  • 泛型:在定义函数、接口、类的时候不能预先确定要使用的数据类型,而是在使用函数、接口、类的时候才确定数据的类型
  • 如果直接在函数上定义数据类型,那么这个类型就固定了,后期只能通过类型重载更改
  • 为了便于维护,可以用到泛型
  • 给函数传入一个 自定义 类型,此类型由调用的时候规定,在调用是确定它的函数类型

    语法: function add<自定义>(val : 自定义) : 自定义 {}
function add<T>( val : T) : T{
console.log(typeof val);
return val
}

这样就定义好了泛型,这个<T>就是定义好的泛型,传入的类型是T返回的数据类型也是T,目前的类型不确定,在调用函数的时候确定是哪个类型。

// 在调用的时候确定,自定义类型为number 传入 数字类型的值
const arr1 = add<number>(1)
// 在调用的时候确定,自定义类型为string 传入 字符串类型的值
const arr2 = add<string>('东方不败')
// 在调用的时候确定,如果不传入类型,系统会自动类型推断
const arr3 = add(true)



输出结果

console.log(arr1);
console.log(arr2);
console.log(arr3);


多个泛型参数

在使用泛型的时候可以规定多个,在传入时确定多个值的类型

// 传入 规定参数类型的值 ,返回 规定参数类型的值
function getMsg<T,S>(val : T , str : S) : [T,S]{
return [val , str]
}

此处定义了两个泛型,在传入的时候需要定义两个数据类型与之对应

// 调用 getMsg 规定类型为 string 和 number  传入 字符串和数字
const arr = getMsg<string,number>('东方不败',100.123)

注意

此处传入的数据类型必须跟定义的数据类型位置一致,否则报错

// 报错,和规定传入的参数类型不匹配,必须是第一个参数字符串,第二个参数数字
const arr2 = getMsg<string,number>(100,'东方不败')



既然泛型是在调用的时候确定其数据类型,那么可以用数字或字符串方法来检测是否可以使用

console.log(arr);
console.log(arr[0].split('')); // 正常,字符串类型可以使用字符串方法
console.log(arr[1].toFixed(2)); // 正常,数字类型可以使用数字方法


案例源码:https://gitee.com/wang_fan_w/ts-seminar

如果觉得这篇文章对你有帮助,欢迎点亮一下star

最新文章

  1. ASP.NET MVC 请求路径相关参数的获取
  2. 由js apply与call方法想到的js数据类型(原始类型和引用类型)
  3. jquery原生对象
  4. ansible使用文档
  5. ES6 学习笔记(1)
  6. HDU 4293---Groups(区间DP)
  7. Redis 学习笔记
  8. Altium Designer 多个输出相连等问题报错解决方法
  9. 在Javaweb中使用Scala
  10. Compiling Xen-4.4 From Source And Installing It On Ubuntu Server (Amd-64)
  11. addEventListener 用法
  12. 实践过配置成功的VNC安装配置
  13. discuz3.2x增加邮箱验证功能
  14. 移动端 前端框架 amaze ui
  15. MATLAB导入数据importdata功能
  16. RDLC(Reportview)报表直接打印,支持所有浏览器,客户可在linux下浏览使用
  17. Java快速开发工具 WebBuilder 6.8发布
  18. IDEA 格式化代码快捷键冲突解决
  19. gzip解压文件报错
  20. 切面编程AOP之KingAOP

热门文章

  1. css属性样式整合
  2. C温故补缺(四):GDB
  3. servlet包找不到,webservlet注解无效
  4. React综合使用联系
  5. python3获取列表逆序的五种方式
  6. PGL图学习之项目实践(UniMP算法实现论文节点分类、新冠疫苗项目实战,助力疫情)[系列九]
  7. Windows 10 读取bitlocker加密的硬盘出现参数错误怎么解决?
  8. #define 的神奇操作
  9. 【Java SE】Day02 数据类型转换、运算符、方法入门
  10. 【笔面试题目】Java集合相关的面试题-List、Map、Set等