7、TypeScript类型、接口、类、泛型综合使用 -- TypeScript封装统一操作Mysql Mongodb Mssql的底层类库。

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

要求: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 MysqlDbs<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[] {
    throw new Error("Method not implemented.");
  }
}

// 定义一个操作mssql数据库的类
class MssqlDBs<T> implements DBI<T>{
  constructor(){
    console.log('建立连接成功');
  }
  add(info: T): boolean {
    throw new Error("Method not implemented.");
  }
  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:'垃圾箱',
        desc:'华展智能垃圾箱'
      },
      {
        title:'候车厅',
        desc:'华展智能候车厅'
      }
    ]
    return list;
  }
}

// 操作用户表 定义一个user类和数据表做映射
class User{
  username:string | undefined;
  password:string | undefined;
}
var u = new User();
u.username = 'root';
u.password = '123456';
var oMysql = new MysqlDbs<User>();//类作为参数来约束数据传入的类型
oMysql.add(u);

var oMssql = new MssqlDBs<User>();
var data = oMssql.get(4);
console.log(data);