泛型类

把类当做参数的泛型类

 首先定义一个类

然后把这个类当做参数来约束数据传入的类型

class use{
    username:string|undefined;
    password:string|undefined;
}

class db{
    add(user:use):boolean{
        console.log(user)
        return true;
    }
}
var u=new use();
u.username="张三"
u.password="123456"
var d=new db();
d.add(u)

编译后的js文件

 

 

 

 在看下面的案例

class art{
    title:string|undefined;
    desc:string|undefined;
    status:number|undefined;

}

class db{
    add(info:art):boolean{
        console.log(info)
        console.log(info.title)
        console.log(info.desc)
        console.log(info.status)

        return true;
    }
}
var u=new art();
u.title="三国演义";
u.desc="历史";
u.status=1
var d=new db();
d.add(u)

编译后的js文件

 

 

 

 此时我们每操控一次数据,name就会在db中重新指定一下传入数据的类型

但是,我们想要只需要封装一次db,就可以动态的对类类型进行校验

//操作数据的泛型类
class db<T>{
    add(info:T):boolean{
        console.log(info)
        return true;
    }
}
//给use增加数据
// 定义一个use类,和数据库进行映射
class use{
    username:string|undefined;
    password:string|undefined;
}

var u=new use()
u.username="小明";
u.password="123456"
var d=new db();
d.add(u)

编译后的js文件

 

 

 

 但是这样写,也会传递数据并输出

d.add("123456")

 

 所以,我们在实例化的时候把sue类传入,验证数据的合法性

var d=new db<use>();

此时就会报错并且不会输出

 

 

 

 我们看下面的案例

添加数据的一种方法

class art{
     title:string|undefined;
     desc:string|undefined;
     status:number|undefined;
     //实例化的时候必须传入这些参数
     constructor(params:{
        title:string|undefined;
        desc:string|undefined;
        status:number|undefined;
     }){
         this.title=params.title;
         this.desc=params.desc;
         this.status=params.status
     }
}
class db<T>{
    add(info:T):boolean{
        console.log(info)
        return true;
    }
}
var a=new art({
    title:"三国演义",
    desc:"历史",
    status:1
})
var d=new db<art>();
d.add(a)

编译后的js文件

 

 

 

posted @ 2021-11-06 12:27  keyeking  阅读(30)  评论(0编辑  收藏  举报