TS泛型的使用
引言
构造函数怎么表示类型?

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

- 尖括号里放的就是泛型,由调用方决定,构造函数拿到具体的类型之后,又传给了接口
- 调用函数的时候尖括号里可以不写,函数会根据参数进行猜测
总结
- 等号左边会根据等号右边来进行推导(赋值能推导)
- 如果标识了泛型的位置,那么会根据使用时的参数进行推导
我们再来看个例子,创建一个数组

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

- 这样item就是一个联合类型number | string
现在我们把callback类型抽出去

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

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

keyof语法

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