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