typescript泛型

//泛型
//泛型就是解决类、接口、方法的复用性,以及对不特定数据类型的支持
//可以支持不特定的数据类型,要求:传入的参数和返回的参数一致
//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);
原文地址:https://www.cnblogs.com/kaiqinzhang/p/12937690.html