typescript - 6.泛型

泛型類

class MinClas<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;
    }
}

var m1=new MinClas<number>();   /*實例化類 而且制定了類的T表明的類型是number*/
m1.add(11);
m1.add(3);
m1.add(2);
alert(m1.min())


var m2=new MinClas<string>();   /*實例化類 而且制定了類的T表明的類型是string*/

m2.add('c');
m2.add('a');
m2.add('v');
alert(m2.min())

泛型接口

一個普通函數類接口sql

interface ConfigFn{
            (value1:string,value2:string):string;
        }


        var setData:ConfigFn=function(value1:string,value2:string):string{


            return value1+value2;
        }

        setData('name','張三');

泛型接口第一種:typescript

interface ConfigFn {
    <T>(value: T): T;
}

var getData: ConfigFn = function <T>(value: T): T {

    return value;
}

getData<string>('張三');

getData<string>(1243);  //錯誤

來看第二種寫法:數據庫

interface ConfigFn<T>{
    (value:T):T;
}

function getData<T>(value:T):T{
    return value;
}

//也能夠寫匿名函數的
//let myGetData:ConfigFn<string>=function <T>(value:T):T{
//    return value;
//};   

let myGetData:ConfigFn<string>=getData;     

myGetData('20');  /*正確*/

// myGetData(20)  //錯誤

//能夠這樣寫
let myGetData2: <T>(arg: T) =>  T  = getData;

let output =  myGetData2('220');  /*正確*/

賦值還有兩種寫法函數

let myGetData2: <T>(arg: T) =>  T  = getData;
let myGetData3: {<T>(value:T):T}  = getData;

泛型類

//定義操做數據庫的泛型類
class MysqlDb<T>{
    add(info:T):boolean{
        console.log(info);       
        return true;
    }
    updated(info:T,id:number):boolean {
        console.log(info);  
        
        console.log(id); 

        return true;
    }
}


//想給User表增長數據

// 一、定義一個User類 和數據庫進行映射

// class User{
//     username:string | undefined;
//     pasword:string | undefined;
// }
// var u=new User();
// u.username='張三';
// u.pasword='123456';
// var Db=new MysqlDb<User>();
// Db.add(u);



//二、相關ArticleCate增長數據  定義一個ArticleCate類 和數據庫進行映射


class ArticleCate{
    title:string | undefined;
    desc:string | undefined;
    status:number | undefined;
    constructor(params:{
        title:string | undefined,
        desc:string | undefined,
        status?:number | undefined
    }){

        this.title=params.title;
        this.desc=params.desc;
        this.status=params.status;


    }
}
//增長操做
// var a=new ArticleCate({
//     title:'分類',
//     desc:'1111',
//     status:1
// });

// //類當作參數的泛型類
// var Db=new MysqlDb<ArticleCate>();
// Db.add(a);

//修改數據
var a=new ArticleCate({
        title:'分類111',
        desc:'2222'      
});

a.status=0;
var Db=new MysqlDb<ArticleCate>();
Db.updated(a,12);
相關文章
相關標籤/搜索