前言:
泛型:软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵话的功能。
在像c和Java这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。这样 用户就可以以自己的数据类型来使用组件。
通俗理解,泛型就是解决类接口方法的复用性、以及对不特定数据类型的支持
下面这种就只能返回string类型的数据:
function getData(value:string):string{
return value;
}
any放弃了类型检查,不管什么类型都可以
泛型
可以支持不特定的数据类型
要求:传入你的参数和返回的参数一致
T表示泛型,具体什么类型是调用这个方法的时候决定的
function getData<T>(value:T):T{
return value;
}
getData<number>(123);
泛型类:
比如有个最小的算法,需要同时支持返回数字和字符串两种类型。通过类的泛型来实现
class MinClass<T>{
public list:T[] = [];
add(num:T){
this.list.pust(num);
}
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;
}
}
var m1 = new MinClas<number>();
var m2 = new MinClas<string>();
m1.add(1);
m1.add(3);
m2.add(a);
m2.add(f);
泛型接口
第一种
interface configFn{
<T>(value1:T,value2:T):T;
}
var setData:configFn = function(value1:T,value2:string):T{
return value1+value2;
}
setData<string>(‘name’,‘张三’);
第二种
interface configFn<T>{
(value1:T,value2:T):T;
}
function getData<T>(value1:T,value2:string):T{
return value1+value2;
}
var myGetData:configFn<string> = getData;
myGetData("20","23");