泛型类
把类当做参数的泛型类
首先定义一个类
然后把这个类当做参数来约束数据传入的类型
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文件