什么是泛型呢?我們可以理解為泛型就是在編譯期間不確定方法的類型(廣泛之意思),在方法調用時,由程序員指定泛型具體指向什么類型。泛型在傳統面向對象編程語言中是極為常見的,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){ } }