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