目 录CONTENT

文章目录

TS(六) 泛型

Typescript(六) 泛型

泛型是指在定义函数、接口、类等时,使用占位符(或称类型参数)来表示实际的类型,而不是具体指定具体的类型。

语法

泛型用的是尖括号 < T,U,V > 来表示,其中 T、U、V 等是占位符,用于表示不同的类型。这些符号必须写在函数名或接口名后面,参数列表前面。

简单使用

const getArray = <T>(arg1: T, time: number = 5): T[] => {
  let arr: T[] = [];
  for (let i = 0; i < time; i++) {
    arr.push(arg1);
  }
  return arr;
};
console.log(getArray("哈哈"));
//最后的结果
/* 
[ '哈哈', '哈哈', '哈哈', '哈哈', '哈哈' ]
*/

泛型变量

当我们使用泛型的时候,你在处理这个数据的时候就必须把这个数据当作任意类型来处理.这就意味着不是所有类型做的操作都不能做,不是所有类型都能调用的方法不能调用

const getLength = <T>(arg1: T): number => {
  return arg1.length;
};

//直接报错

接口类型类定义泛型

第一种

// 修复泛型重复声明问题,统一类型参数的使用
interface GetArray {
  <T>(arg: T, times: number): T[];
}

const getArray: GetArray = <T>(arg: T, times: number = 5): T[] => {
  return new Array(times).fill(arg);
};

console.log(getArray("哈哈"));
//最后的结果
/* 
[ '哈哈', '哈哈', '哈哈', '哈哈', '哈哈' ]
*/

第二种

interface GetPerson<T> {
  age: T;
  name: string;
}
const Person1: GetPerson<number> = {
  age: 18,
  name: "张三",
};
console.log(Person1.age); // 18
console.log(Person1.name); // 张三

泛型约束(继承)extends

interface a1 {
  name: string;
}

const getLength = <T extends a1>(a1: T): T => {
  return a1.name;
};
getLength({ name: "哈哈", kuanshi: "呵呵呵" }); // 哈哈
0

评论区