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泛型的更多相关文章

  1. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  2. .NET面试题系列[8] - 泛型

    “可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...

  3. C#4.0泛型的协变,逆变深入剖析

    C#4.0中有一个新特性:协变与逆变.可能很多人在开发过程中不常用到,但是深入的了解他们,肯定是有好处的. 协变和逆变体现在泛型的接口和委托上面,也就是对泛型参数的声明,可以声明为协变,或者逆变.什么 ...

  4. 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)

    建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...

  5. 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  6. C#泛型详解(转)

    初步理解泛型: http://www.cnblogs.com/wilber2013/p/4291435.html 泛型中的类型约束和类型推断 http://www.cnblogs.com/wilber ...

  7. C# 泛型

    C# 泛型 1.定义泛型类 在类定义中包含尖括号语法,即可创建泛型类: class MyGenericClass<T> { //Add code } 其中T可以遵循C#命名规则的任意字符. ...

  8. java8中lambda表达式的应用,以及一些泛型相关

    语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...

  9. java 泛型

    1.Student stu =tool.getObj();右边得到的是Object类型,需要向下转型,强转换. 2. 3. 4.泛型方法不能被静态修饰这样写 5.如果想定义定义静态泛型方法,只能这样写 ...

随机推荐

  1. 随机算法 - Miller_Rabin pollard_rho

    #include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #in ...

  2. MongoDB 官方文档中的 aggregate 例子当中的 $sum: 1 , 这里的 1 起什么作用?

    按照 group 的条件, 满足一条就加1, db.getCollection('user_login_info').aggregate( [ {$project:{account_id:" ...

  3. java类中元素初始化顺序

    结论:对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器. public class Test4 { @Tes ...

  4. 了解人工智能?-百度AI

    了解人工智能? 什么是人工智能? 由人创造的"智慧能力",同样具备智慧生物的能力 耳朵=倾听=麦克风=语音识别 ASR Automatic Speech Recognition 嘴 ...

  5. GPU与CPU

    GPU与CPU CPU CPU,也就是中央处理器,结构主要包括控制器(指挥各部分工作).运算器(实现数据加工).寄存器.高缓以及数据/控制/状态总线.计算机的性能很大程度上依赖于CPU,CPU的功能包 ...

  6. IDEA debug下取消后续操作

    有时进行测试时,不想后面的代码执行 具体应该怎么请看下文: 测试代码 public class demo { public static void main(String[] args) { Syst ...

  7. Percona-XtraDB-Cluster-57 安装操作记录

    一.PXC集群的一些特性 Percona官网服务器位于境外,访问很困难.本次安装使用的是其官网提供的最新版本5.7.23-31.31.1.el7,当前日期为2018.10.10. PXC集群中,存储引 ...

  8. mvc jQuery 点击按钮实现导出Excel功能 参数长短不限

    var exportSubmit=function(url, obj){ var form = $("<form>"); //定义一个form表单 form.attr( ...

  9. 自己动手开发手机APP控制西门子200smart 教程(原创干货)

    自己动手开发手机APP控制西门子200smart 教程(原创干货)   自己动手开发手机APP控制西门子200smart 教程(原创干货) 2020-02-09 19:06:45 自己动手开发手机AP ...

  10. js中 call() 和 apply() 方法的区别和用法详解

    1.定义 每个函数都包含俩个非继承而来的方法:call() 和 apply()   call 和 apply 可以用来重新定义函数的的执行环境,也就是 this 的指向:call 和 apply 都是 ...