/* 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);