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: "呵呵呵" }); // 哈哈
评论区