把类当做参数的泛型类;
先看一下下面的代码:
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)