ts中泛型、泛型方法、泛型類、泛型接口


什么是泛型呢?我們可以理解為泛型就是在編譯期間不確定方法的類型(廣泛之意思),在方法調用時,由程序員指定泛型具體指向什么類型。泛型在傳統面向對象編程語言中是極為常見的,ts中當然也執行泛型,如果你理解c#或java中的泛型,相信本篇理解起來會很容易。

泛型函數、泛型類、泛型接口。

08_generic.ts

/*
* ts中泛型
* 泛型就是在編譯期間不確定方法的類型(廣泛之意思),在方法調用時,由程序員指定泛型具體指向什么類型
*/

 
         
/*
 * ts中泛型
 *    泛型就是在編譯期間不確定方法的類型(廣泛之意思),在方法調用時,由程序員指定泛型具體指向什么類型
 */
 
//1 泛型函數
 
/**
 * 獲取數組中最小值 (數字)
 * @param {number[]} arr
 * @returns {number}
 */
function  getMinNumber(arr:number[]):number{
    var min=arr[0];
    arr.forEach((value)=>{
        if(value<min){
            min=value;
        }
    });
    return min;
}
 
/**
 * 獲取數組中最小值 (字符串)
 * @param {number[]} arr
 * @returns {number}
 */
function  getMinStr(arr:string[]):string{
    var min=arr[0];
    arr.forEach((value)=>{
        if(value<min){
            min=value;
        }
    });
    return min;
}
 
console.log(getMinNumber([1, 3, 5, 7, 8]));//1
console.log(getMinStr(["tom","jerry","jack","sunny"]));//jack
 
/**
 * 獲取數組中最小值 (T泛型通用)
 * @param {T[]} arr
 * @returns {T}
 */
function getMin<T>(arr:T[]):T{
   var min=arr[0];
   arr.forEach((value)=>{
      if(value<min){
          min=value;
      }
   });
    return min;
}
 
console.log(getMin([1, 3, 5, 7, 8]));
console.log(getMin(["tom","jerry","jack","sunny"]));
 
 
//2 泛型類
class GetMin<T>{
     arr:T[]=[];
     add(ele:T){
         this.arr.push(ele);
     }
    min():T{
       var min=this.arr[0];
       this.arr.forEach(function (value) {
          if(value<min){
              min=value;
          }
       });
       return min;
    }
}
  var gm1= new  GetMin<number>();
   gm1.add(5);
   gm1.add(3);
   gm1.add(2);
   gm1.add(9);
console.log(gm1.min());
 
var gm2= new  GetMin<string>();
gm2.add("tom");
gm2.add("jerry");
gm2.add("jack");
gm2.add("sunny");
console.log(gm2.min());
 
 
 
/**
 * 3 泛型函數接口
 */
interface ConfigFn{
    <T>(value:T):T;
}
 
var getData:ConfigFn=function<T>(value:T):T{
    return value;
}
getData<string>('張三');
// getData<string>(1243);  //錯誤
 
 
// 類似  Map<String,Object> Param  接口
interface Param{
    [index:string]:any
}
 
 
 
//4 泛型類接口
 
/**
 * page分頁對象
 */
class Page{
    private currentPage:number=1; //當前頁碼 默認1
    private pageSize:number=10;//每頁條數 默認為10
    private sortName:string; //排序字段
    private sortOrder:string="asc"; // 排序規則 asc | desc 默認為asc正序
 
 
     constructor(param:Param){
         if(param["currentPage"]){
             this.currentPage=param["currentPage"];
         }
         if(param["pageSize"]){
             this.pageSize=param["pageSize"];
         }
         if(param["sortName"]){
             this.sortName=param["sortName"];
         }
         if(param["sortOrder"]){
             this.sortOrder=param["sortOrder"];
         }
     }
 
    public    getStartNum():number{
        return   (this.currentPage-1)*this.pageSize;
    }
}
 
 
class User{
     id:number;//id主鍵自增
     name:string;//姓名
     sex:number;//性別 1男 2女
     age:number;//年齡
     city:string;//城市
     describe:string;//描述
 
}
 
//泛型接口
interface  BaseDao<T> {
     findById(id:number):T;//根據主鍵id查詢一個實體
     findPageList(param:Param,page:Page):T[];//查詢分頁列表
     findPageCount(param:Param):number;//查詢分頁count
     save(o:T):void;//保存一個實體
     update(o:T):void;//更新一個實體
     deleteById(id:number);//刪除一個實體
}
 
/**
 * 接口實現類
 */
class UserDao<User> implements BaseDao<User>{
     findById(id:number):User{
 
        return null;
     }
    findPageList(param:Param,page:Page):User[]{
         return [];
    }
    findPageCount(param:Param):number{
         return   0;
    }
    save(o:User):void{
 
    }
    update(o:User):void{
 
    }
    deleteById(id:number){
 
    }
}
 
         

 

 
        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM