指 附属于函数,类,接口,类型别名(联合类型)之上的类型
目的在于可以保留一下类型信息(多个位置的类型应该保持一致或有关联的信息),相当于是一个类型变量,在定义时是无法预先知道具体的类型,可以用该变量来代替,只有在调用时,才能确定它的类型
如何使用泛型
在函数名之后写上 <泛型名称>
默认值为空对象类型,默认值可以修改
//泛型
function take<T>(arr:T[],n:number):T[]{
if(n >= arr.length){
return arr;
}
const newArr:T[] = [];
for(let i = 0; i < n; i ++){
newArr.push(arr[i])
};
return newArr;
}
type callback<T> = (n:T, i:number) => boolean;
interface call<T> {
(n:T, i:number): boolean
}
泛型约束
用于限制泛型的取值
interface UAge {
age:number
}
function U<T extends Uage>(obj:T){}
多泛型
function mixinArray<T,K>(arr1:T[], arr2: K[]):(T | K){
if(arr1.length != arr2.length){
throw new Error('两个数组长度不一致')
}
let result:(T | k)[] = [];
for(let i = 0; i < arr1.length; i ++){
result.push(arr1[i]);
result.push(arr2[i]);
}
return result;
}