6、typescript 泛型

mac2025-08-29  14

泛型:可以支持不特定的数据类型

 

T表示泛型,具体什么类型是调用这个方法的时候决定的

function getData<T>(value:T):T{ return value; } getData<number>(123); getData<string>('1214231'); getData<number>('2112'); /*错误的写法*/

泛型类:

比如有个最小堆算法,需要同时支持返回数字和字符串 a  -  z两种类型。  通过类的泛型来实现

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

泛型接口:

interface ConfigFn<T>{ (value:T):T; } function getData<T>(value:T):T{ return value; } var myGetData:ConfigFn<string>=getData; myGetData('20'); /*正确*/ // myGetData(20) //错误

 

实践

功能:定义一个操作数据库的库  支持 Mysql Mssql  MongoDb

 

要求1:Mysql MsSql  MongoDb功能一样  都有 add  update  delete  get方法    

 

注意:约束统一的规范、以及代码重用

 

解决方案:需要约束规范所以要定义接口 ,需要代码重用所以用到泛型

 

    1、接口:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范

 

    2、泛型 通俗理解:泛型就是解决 类 接口 方法的复用性、

 

interface DBI<T>{ add(info:T):boolean; update(info:T,id:number):boolean; delete(id:number):boolean; get(id:number):any[]; } //定义一个操作mysql数据库的类 注意:要实现泛型接口 这个类也应该是一个泛型类 class MysqlDb<T> implements DBI<T>{ constructor(){ console.log('数据库建立连接'); } add(info: T): boolean { console.log(info); return true; } update(info: T, id: number): boolean { throw new Error("Method not implemented."); } delete(id: number): boolean { throw new Error("Method not implemented."); } get(id: number): any[] { var list=[ { title:'xxxx', desc:'xxxxxxxxxx' }, { title:'xxxx', desc:'xxxxxxxxxx' } ] return list; } } //定义一个操作mssql数据库的类 class MsSqlDb<T> implements DBI<T>{ constructor(){ console.log('数据库建立连接'); } add(info: T): boolean { console.log(info); return true; } update(info: T, id: number): boolean { throw new Error("Method not implemented."); } delete(id: number): boolean { throw new Error("Method not implemented."); } get(id: number): any[] { var list=[ { title:'xxxx', desc:'xxxxxxxxxx' }, { title:'xxxx', desc:'xxxxxxxxxx' } ] return list; } } class User{ username:string | undefined; password:string | undefined; } var u=new User(); u.username='张三2222'; u.password='123456'; var oMssql=new MsSqlDb<User>(); oMssql.add(u); //获取User表 ID=4的数据 var data=oMssql.get(4); console.log(data);

 

最新回复(0)