需求:定义一个操作数据库的库,支持不同数据库,不同数据库的功能都一样,都有增add、update、delete、get方法
需要约束规范所以要定义接口,需要代码重用所以用到泛型
先定义一个泛型接口,包含几个数据库操作都要实现的方法:
interface DB<T>{
add(info:T):boolean;
delete(id:number):boolean;
update(info:T,id:number):boolean;
get(id:number):any;
}
接下来定义操作 Mysql 数据库的类:
实现接口中的方法,可以自己在 MySql类中手敲,也可以把鼠标放在类上,点击快速修复(Quick fix)->实现接口,就自动生成了代码:
实现泛型接口,这个类也应该是泛型类
// 操作 Mysql 数据库的类
class MySql<T> implements DB<T>{
add(info: T): boolean {
console.log(info);
return true
}
delete(id: number): boolean {
throw new Error("Method not implemented.");
}
update(info: T, id: number): boolean {
throw new Error("Method not implemented.");
}
get(id: number): any {
return {
name:'ming',
age:22
}
}
}
定义User类 和数据表做映射:
class User{
name:string|undefined;
age:number|undefined;
}
let u = new User()
u.name = 'lucy'
u.age = 18
let oMySql = new MySql<User>() //类作为参数约束数据传入的类型
oMySql.add(u) // User { name: 'lucy', age: 18 }
let data = oMySql.get(4)
console.log(data); //{ name: 'ming', age: 22 }