TypeScript泛型类 - 把类作为参数类型的泛型类

/*

TypeScript泛型类 - 把类作为参数类型的泛型类
   
*/

/*

泛类:泛型可以帮助我们避免重复的代码以及对不特定数据类型的支持(类型校验),下面我们看看把类当做参数的泛型类

1、定义个类
2、把类作为参数来约束数据传入的类型 


*/

//比如有个最小堆算法 普通类型

// class MinClass{
//     public 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 m1=new MinClass();   
// m1.add(11);
// m1.add(3);
// m1.add(2);
// alert(m1.min())






//类的泛型
// 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())


/*
定义一个User的类这个类的作用就是映射数据库字段  
然后定义一个 MysqlDb的类这个类用于操作数据库   
然后把User类作为参数传入到MysqlDb中

var user=new User({
    username:'张三',
    password:'123456'
})

var Db=new MysqlDb();
Db.add(user);

*/



//把类作为参数来约束数据传入的类型 

// class User{
//     username:string | undefined;
//     pasword:string | undefined;
// }


// class MysqlDb{
//     add(user:User):boolean{

//         console.log(user);
//         return true;
//     }

// }
// var u=new User();
// u.username='张三';
// u.pasword='123456';
// var Db=new MysqlDb();
// Db.add(u);









// class ArticleCate{
//     title:string | undefined;
//     desc:string | undefined;
//     status:number | undefined
// }


// class MysqlDb{
//     add(info:ArticleCate):boolean{
//         console.log(info);
//         console.log(info.title);
//         return true;
//     }

// }
// var a=new ArticleCate();
// a.title="国内";
// a.desc="国内新闻";
// a.status=1;

// var Db=new MysqlDb();
// Db.add(a);

// 问题:代码重复




//定义操作数据库的泛型类
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表增加数据

// 1、定义一个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);



//2、相关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);

 

posted on 2019-06-17 16:32  LoaderMan  阅读(4144)  评论(0编辑  收藏  举报

导航