欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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~~~