NO8 TypeScript 接口,类,泛型综合使用

148 阅读1分钟
/*

    功能:定义一个操作数据库的库,支持mysql,mssql

    要求:mysql,mssql功能一样,都有add、update/delete/get方法

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

    解决方案: 约束统一的规范(接口),代码复用(泛型)

*/

interface DBI<T>{

    add(info:T):boolean;

    update(info:T, id:number):boolean;

    delete(id:number):boolean;

    get(id:number):any[];

}

// 注意: 要实现泛型接口,这个类也应该是一个泛型类

class MysqlDb<T> implements DBI<T> {

    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.");

    }

}

class MssqlDb<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[] {

        var list = [

            {title'ssss',desc:'mmmmm'}

        ]

        return list

    }

}

// 定义一个user类,和数据表做映射

class User {

    username: string | undefined;

    password: string | undefined

}

var u = new User()

u.username = '张三'

u.password = '123'



var my = new MysqlDb<User>() // 类作为参数来约束数据传入的类型

my.add(u)



var ms = new MssqlDb<User>() // 类作为参数来约束数据传入的类型

ms.add(u)

var data = ms.get(4)

console.log(data)