Typescript--深入讲解泛型类

把类当做参数的泛型类;

先看一下下面的代码:

class User { // 用户信息类
  name: string | undefined;
  password: string | undefined;
}
class MysqlDb { // 操作数据库的类
  add(user: User): boolean { 
    // 伪代码..........
    console.log('user:',user); 
    return true;
  }
}
var u = new User();
u.name = "战三";
u.password = "12346";

var md = new MysqlDb();
md.add(u)

User类:用户信息类; MysqlDb 类: 操作数据库的类;

乍眼一看,没有什么问题,因为只有一个User类的话,作为类 MysqlDb 中的方法 add 的校验类型,没问题,如果有其他类也想使用MysqlDb 类,就无法使用,需要新建类,这样造成代码冗余;所以就需要使用泛型类来定义 MysqlDb 类;看看优化有的代码:

// 操作数据库的泛型类
class MysqlDb2<T>{
  add(info: T): boolean {
    console.log(info);
    return true;
  }
  update(info: T, id: number): boolean { 
    console.log(info,id);
    return true;
  }
}
// 定义一个用户类
class User2 { 
  name: string|undefined;
  password: string | undefined;
  constructor(params: {name: string | undefined; password: string | undefined }) { 
    this.name = params.name;
    this.password = params.password;
  }
}
var u2 = new User2({name:"孔明",password:"123"});
var mu = new MysqlDb2<User2>();
mu.add(u2)
// 定义一个文章分类的类
class ArticleCate{
  title: string | undefined;
  desc: string | undefined;
  state: number | undefined;
  constructor(params: {title: string | undefined; desc: string | undefined; state?: number | undefined; }) { 
    this.title = params.title;
    this.desc = params.desc;
    this.state = params.state;
  }
}
var artic = new ArticleCate({title:"龙的传人",desc:"讲述了历史"});
var mu2 = new MysqlDb2<ArticleCate>();
mu2.add(artic)
mu2.update(artic,123)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值