Typescript 泛型
程序员文章站
2022-07-03 17:09:34
...
首先我们创建一个函数:
fun(p:ClsA):void{
//我们可以对传进来的ClsA类型的对象p进行操作
}
但如果我们想在函数中去创建该怎么传递ClsA类型呢?
直接传递Class or class?
fun(pCls:class):void{
//这显然是错误的,语法不通过,而且你也无法通过参数来获得pCls的更多细节
}
这时候就需要泛型来帮忙了
fun<TCls>(pCls:{new(): TCls}):void{
let p:TCLs = new pCls();
//这样就可以适应各种类型
}
但这样还是不知道类型的构造方式,比如在构造的时候穿参该怎么办?
fun<TCls>(pCls:{new(string, bool): TCls}):void{
let p:TCLs = new pCls('hello', false);
//这样就可以构造时定制传参结构了
}
如果构造方式多样该怎么写呢?
fun<TCls>(pCls:{new(string, bool): TCls, new(): TCls}):void{
let pA:TCLs = new pCls('hello', false);
let pB:TCLs = new pCls();
//这样就可以采用不同的构造方法
}
这只是限定了构造,我还是不知道我的TCls到底是什么呀?
fun<TCls extends ClsA>(pCls:{new(string, bool): TCls}):void{
let p:TCLs = new pCls('hello', false);
//这样就能知道p中的函数,并合法使用了。
}
为什么这么用?
首先,类型传递可以灵活控制构造时间点位置。其次呢,你不觉得更方便了吗 233333~~~