Typescript 使用接口 泛型 类实现操作多种数据库的库

功能:定义一个操作数据库的库 支持mysql mssql MongoDb
要求:mysql mssql MoingoDb功能一样 都有add update delete get 方法
注意:约束统一规范 以及代码重用
1、首先用接口定义一个规范,规范里确定使用该接口的类要实现的方法

interface DBI{
    add(value:T):boolean
    update(value:T,id:number):boolean
    delete(id:number):boolean
    get(id:number):any
}

2、实现泛型类 要实现泛型接口 这个类必须是泛型类!!!

class mysqlDb implements DBI{
    add(value: T): boolean {
        return true
    }
    update(value: T, id: number): boolean {
        return true
    }
    delete(id: number): boolean {
        return true
    }
    get(id: number): any[] {
        var list=[
            {
                id:1,
                name:'aaa'
            },
            {
                id:2,
                name:'bbb'
            }
        ]
        return list
    }
}
//实现mongoDb类
class MongoDb implements DBI{
    add(value: T): boolean {
        return true
    }
    update(value: T, id: number): boolean {
        return true
    }/*  */
    delete(id: number): boolean {
        return true
    }
    get(id: number): boolean {
        return true
    }
}

3、定义类 当做约束

class User{
    username:string | undefined;
    password:string | undefined;
}
class Artical{
    title:string | undefined;
    desc:string | undefined;
    type:number | undefined;
}
4、实例化类
var u = new User()
var a = new Artical()

u.username='张三'
u.password='123456'

a.title='一本书'
a.desc='这是一本好书'
a.type=1

var mysql=new mysqlDb()
var mongoDb=new MongoDb()

mysql.add(u)
mongoDb.update(a,1)

泛型接口 -> 泛型类 -> 传入参数(user类 | Artical类 实例化的对象)
反过来看 user类 | Artical类实例化后传入泛型类 泛型类又遵从泛型接口 其实传入参数是受限制于最初始的泛型接口 从而实现限制传入该方法的数据

你可能感兴趣的:(Typescript 使用接口 泛型 类实现操作多种数据库的库)