指 附属于函数,类,接口,类型别名(联合类型)之上的类型
目的在于可以保留一下类型信息(多个位置的类型应该保持一致或有关联的信息),相当于是一个类型变量,在定义时是无法预先知道具体的类型,可以用该变量来代替,只有在调用时,才能确定它的类型

如何使用泛型

在函数名之后写上 <泛型名称> 默认值为空对象类型,默认值可以修改

  1. //泛型
  2. function take<T>(arr:T[],n:number):T[]{
  3. if(n >= arr.length){
  4. return arr;
  5. }
  6. const newArr:T[] = [];
  7. for(let i = 0; i < n; i ++){
  8. newArr.push(arr[i])
  9. };
  10. return newArr;
  11. }
  12. type callback<T> = (n:T, i:number) => boolean;
  13. interface call<T> {
  14. (n:T, i:number): boolean
  15. }

泛型约束

  1. 用于限制泛型的取值
  1. interface UAge {
  2. age:number
  3. }
  4. function U<T extends Uage>(obj:T){}

多泛型

  1. function mixinArray<T,K>(arr1:T[], arr2: K[]):(T | K){
  2. if(arr1.length != arr2.length){
  3. throw new Error('两个数组长度不一致')
  4. }
  5. let result:(T | k)[] = [];
  6. for(let i = 0; i < arr1.length; i ++){
  7. result.push(arr1[i]);
  8. result.push(arr2[i]);
  9. }
  10. return result;
  11. }