//泛型
//泛型就是解决类、接口、方法的复用性,以及对不特定数据类型的支持
//可以支持不特定的数据类型,要求:传入的参数和返回的参数一致
//T表示泛型(只要是任意大写字母就可以),具体什么类型就是调用这个方法的时候决定的
function getData<T>(value:T):T{
return value;
}
getData<number>(123)
getData<string>('123')
//泛型类
class MinClass<T>{
public list:T[] = [];
add(value:T):void{
this.list.push(value)
}
min():T{
var minNum = this.list[0];
this.list.map(item=>{
if(minNum>this.list[i]){
minNum = this.list[i]
}
})
return minNum
}
}
let m1 = new MinClass<number>();//实力化类,并指定类的T类型代表number
m1.add(2);
m1.add(45);
m1.add(34);
m1.add(35);
console.log(m1.min())
//把类当作参数的泛型类
class User{
name:string|undefined;
age:number|undefined;
constructor(params:{
name:string|undefined;
age?:number|undefined;
}){
this.name = params.name;
this.age = params.age;
}
}
class MysqlObj<T>{
add(user:T):void{
console.log(user)
}
}
let u = new User({
name:'zhangsan',
age:12
})
let ob = new MysqlObj<User>();//类当作参数的泛型类
ob.add(u)
//泛型接口(第一种)
interface ConfigFn{
<T>(value:T):T;
}
let getData2:ConfigFn = function<T>(value:T):T{
return value;
}
getData2<string>('zhangsan');
getData2<number>(123);
//泛型接口(第二种)
interface ConfigFn2<T>{
(value:T):T;
}
function getData3<T>(value:T):T{
return value;
}
let myGetData:ConfigFn2<string> = getData3;
myGetData('20')
getData2<number>(123);