7. TS 中 类、接口、泛型 的综合使用

97 阅读1分钟

一、实现功能

TS 中 类、接口、泛型 的综合使用

实现功能:定义一个操作数据库的 库, 支持 mySql、msSql

要求:mySql、msSql 的功能一样,都有add、update、delete、get 方法

注意:约束统一的规范,以及代码复用性

解决方案:需要约束规范所以要定义接口,需要代码复用所以用到泛型

  1. 接口:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范

  2. 泛型 通俗理解:泛型就是解决 类 、接口 、方法 的复用性

二、实现代码

interface DBI<T>{
    Add(info:T):boolean;
    Edit(info:T,Id:number):boolean;
    Delete(Id:number):boolean;
    List(Id:number):any[];

}

// 定义一个操作 mySql 数据库的类   
// 注意:要实现泛型接口 这个类也应该是一个泛型类
class mySqlDB <T> implements DBI<T>{
    Add(info: T): boolean {
        console.log(info, '----')
        return true
    }
    Edit(info: T, Id: number): boolean {
        return true
    }
    Delete(Id: number): boolean {
        return true
    }
    List(Id: number):any[] {
        return [
            {id: "xxxx", content: 'AAAAA'},
            {id: "xxxx", content: 'AAAAA'},
        ]
    }
    
}

class msSqlDB<T> implements DBI<T>{
    Add(info: T): boolean {
        return true
    }
    Edit(info: T, Id: number): boolean {
        return true
    }
    Delete(Id: number): boolean {
        return true
    }
    List(Id: number):any[] {
        return [
            {id: "xxxx", content: 'AAAAA'},
            {id: "xxxx", content: 'AAAAA'},
        ]
    }

}

// 定义一个 Use 类 和数据表做映射
class Use{
    name:string | undefined;
    pass:string | undefined;
}


let u = new Use()
u.name = 'gg';
u.pass = '123'

let omysql = new mySqlDB<Use>() // 类作为参数来约束数据传入的类型
omysql.Add(u)


let omssql = new msSqlDB<Use>()// 类作为参数来约束数据传入的类型
omssql.Add(u)
console.log(omssql.List(1))

图示:

image.png