首页 > 建站教程 > JS、jQ、TS >  typescript接口和泛型的简单示例正文

typescript接口和泛型的简单示例

通过typescript的泛型和接口,定义一个操作数据库的库,支持MySql、MongoDb

要求:MySql、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的类
//注意:要实现泛型接口,这个类也要是泛型,MySqlDb后面也要跟上泛型,否则报错
class MySqlDb<T> implements DBI<T>{
    constructor(){
        console.log('连接mySql数据库')
    }
    add(info:T):boolean{
        console.log(info);
        return true;
    }
    update(info:T,id:number):boolean{
        return true;
    }
    delete(id:number):boolean{
        return true
    }
    get(id:number):any[]{
        let list:any[] = [];  //数据库得到的数据
        return list
    }
}

//操作MongoDb的类
//注意:要实现泛型接口,这个类也要是泛型,MongoDb后面也要跟上泛型,否则报错
class MongoDb<T> implements DBI<T>{
    constructor(){
        console.log('连接MongoDb数据库')
    }
    add(info:T):boolean{
        console.log(info);
        return true;
    }
    update(info:T,id:number):boolean{
        return true;
    }
    delete(id:number):boolean{
        return true
    }
    get(id:number):any[]{
        let list:any[] = [];  //数据库得到的数据
        return list
    }
}

//定义用户表做映射
class User{
    username:string | undefined;
    password:string | undefined;
}

//操作
let u = new User();
u.username = '111';
u.password = '222';
let sql = new MySqlDb<User>();  //用User类来约束传入的合法性
sql.add(u);