06_TypeScript泛型
1、泛型的定义
泛型就是解决 类,接口 方法的复用性,以及对不特定数据的支持(类型校验)。
2、泛型函数
//T 表示泛型,具体什么类型是调用这个方法的时候决定的,
//T可以用其他大写字母表示,传入的参数和返回的参数一致
function getData<T>(value:T):T{
return value;
}
getData<number>(123);
getData<string>('123');
getData<number>('123');//错误的写法
3、泛型类
//定义一个类,实现有个最小堆算法,需要同时支持返回数字和字符串来俩种类型
//普通写法:只能支持一种数据类型 number 或 string
class MinClass{
plublic list:number[]=[];
add(num:number){
this.list.push(num)
}
min():number{
var minNum = this.list[0];
for(var i=0;i<this.list.length;i++){
if(minNum>this.list[i]){
minNum = this.list[i]
}
}
return minNum;
}
}
var m = new MinClass<number>();
m.add(2);m.add(4);m.add(6)
console.log(m.min())
//泛型写法:可同时支持 number 和 string
class MinClass<T>{
public list:T[]=[];
add(value:T):void{
this.list.push(value)
}
min():T{
var minNum = this.list[0];
for(var i=0;i<this.list.length;i++){
if(minNum>this.list[i]){
minNum = this.list[i]
}
}
return minNum;
}
}
//实例化类,并且制定了类的T代表类型是neummber
var m = new MinClass<number>();
//实例化类,并且制定了类的T代表类型是string 传参 a-z
var m = new MinClass<string>();
m.add('a');m.add('b');m.add('c')
console.log(m.min())
4、泛型接口
//函数类型接口
interface Config{
(value1:string,value2:string):string;
}
var setData:Config=function(value1:string,value2:string):string{
return value1+value2;
}
setData('name','张三')
//泛型接口 写法一
interface Config{
<T>(value:T):T;
}
var getData:Config=function<T>(value:T):T{
return value;
}
getData<string>('123');
getData<number>(123);
//泛型接口 写法二
interface Config<T>{
(value:T):T;
}
function getData<T>(value:T):T{
return value;
}
var myGetData:Config<string>=getData;
myGetData('1223')
5、把类当作参数
//定义一个User类
class User{
username:string | undefined;
pasword:string | undefined;
}
//定义一个MyData类
class MyData{
//把User 类当作参数来验证传入参数的合法性
add(user:User):boolean{
return true;
}
}
var u = new User();
u.username = '张三';
u.pasword = '1234';
var D = new MyData();
//把类当作参数传入
D.add(u);
//定义一个User类
class User{
username:string | undefined;
pasword:string | undefined;
}
//定义一个MyData类 ,泛型写法
class MyData<T>{
add(info:T):boolean{
console.log(info);
return true;
}
}
var u = new User();
u.username = '张三';
u.pasword = '1234';
var data = new MyData<User>();
data.add(u);
06_TypeScript泛型的更多相关文章
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- .NET面试题系列[8] - 泛型
“可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...
- C#4.0泛型的协变,逆变深入剖析
C#4.0中有一个新特性:协变与逆变.可能很多人在开发过程中不常用到,但是深入的了解他们,肯定是有好处的. 协变和逆变体现在泛型的接口和委托上面,也就是对泛型参数的声明,可以声明为协变,或者逆变.什么 ...
- 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)
建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...
- 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
- C#泛型详解(转)
初步理解泛型: http://www.cnblogs.com/wilber2013/p/4291435.html 泛型中的类型约束和类型推断 http://www.cnblogs.com/wilber ...
- C# 泛型
C# 泛型 1.定义泛型类 在类定义中包含尖括号语法,即可创建泛型类: class MyGenericClass<T> { //Add code } 其中T可以遵循C#命名规则的任意字符. ...
- java8中lambda表达式的应用,以及一些泛型相关
语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...
- java 泛型
1.Student stu =tool.getObj();右边得到的是Object类型,需要向下转型,强转换. 2. 3. 4.泛型方法不能被静态修饰这样写 5.如果想定义定义静态泛型方法,只能这样写 ...
随机推荐
- 第五篇:python购物车小程序开发demo
功能:自定义工资水平,可选商品加购余额实时提醒用到的知识点:列表.if多分支.循环.高亮输出未解决bug删除商品后不能自动退出 代码如下: if shopping_list: shopping_lis ...
- 关于互信息(Mutual Information),我有些话要说
两个随机变量的独立性表示两个变量X与Y是否有关系(贝叶斯可证),但是关系的强弱(mutual dependence)是无法表示的,为此我们引入了互信息. 其中 p(x,y) 是 X 和 Y 的联合概率 ...
- LeetCode 第15题-三数之和
1. 题目 2.题目分析与思路 3.思路 1. 题目 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且 ...
- Nest.js你学不会系列-初识Nest
前言 最近在学习研究 Nest 框架,但是在学习过程中除了参考翻阅官方文档外国内几乎没有多少资料能系统的讲解 Nest 的相关内容,所以打算想通过我自己学习的角度讲解下 Nest 框架,不知道能坚持多 ...
- java 数组2
一.创建异常 1.空指针异常 2.超出索引范围 二.遍历 for循环 三.求数组中的最大值 package cn.wt.day05.demon02; public class DemonArray03 ...
- requests请求
requests:伪造浏览器请求 请求 1.get requests.get( url='', params={ 'k1': ''v1, 'k2': 'v2' } ) 即 url?k1=k2& ...
- Firebase REST API
use firebase and firesharp to do a Library management system . look github.com/ziyasal/FireSharp
- n-tier waf 41 project 层真够多
ps: http://waf.codeplex.com/releases/view/618696
- ThreeJS 物理材质shader源码分析(像素着色器)
再此之前推荐一款GLTF物理材质在线编辑器https://tinygltf.xyz/ 像素着色器(meshphysical_frag.glsl) #define PHYSICAL uniform ve ...
- GC原理---垃圾收集器
垃圾收集器 如果说收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现 Serial收集器 串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收.新生代.老 ...