TS泛型的使用

214 阅读2分钟

引言

  • 泛型就是在使用的时候确定类型

构造函数怎么表示类型?

Image.png

但是会有一个问题,我们定义接口,它的返回值类型我们总不能一直枚举下去吧

我们可以使用泛型

Image.png

  • 尖括号里放的就是泛型,由调用方决定,构造函数拿到具体的类型之后,又传给了接口
  • 调用函数的时候尖括号里可以不写,函数会根据参数进行猜测 

总结

  • 等号左边会根据等号右边来进行推导(赋值能推导)
  • 如果标识了泛型的位置,那么会根据使用时的参数进行推导

我们再来看个例子,创建一个数组

Image.png

  • 在这个例子的接口中,我们把放到了下面,放下面表示函数调用的时候使用这个泛型,放上面表示使用接口的时候才传入泛型

我们在看一个循环数组的例子

Image.png

  • 这样item就是一个联合类型number | string

现在我们把callback类型抽出去

Image.png

  • 这个时候我们就有一个问题,是写在等号前面还是等号后面,如果写在等号前面,就在使用这个接口的时候传入T,如果写在等号后面,就靠函数执行的时候靠它自己推测T的类型
  • 我们只能写在等号前面,使用接口的时候传入T,因为写在等号后面,靠函数执行自己推测,这种情况是不行的,因为在编译阶段,循环并没有执行,所以callback在类型检测的时候并没执行,也就推测不出来

泛型约束

Image.png

  • 约束泛型T要满足string

约束函数的参数应该满足某个类型

Image.png

  • 满足这个词要理解到位

keyof语法

  • 可以取出一个对象中的所有key组成的联合类型

Image.png

  • 约束key只能在obj中的属性里取,并且obj满足是一个对象