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{
  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();
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();
mu2.add(artic)
mu2.update(artic,123)

 

你可能感兴趣的:(js,typescript)