泛型
# 泛型
在创建函数的时候,容易丢失一些信息(多个位置的类型应该保持一致或有关联的信息)
泛型就是指属于函数、类、接口、类型别名之上的类型。(相当于一个变量)
泛型相当于一个类型变量,在定义时,无法预先知道具体的类型,可以用该变量来代替,只有到调用时,才能确定它的类型。
TS 会智能的根据传递的参数,推导出泛型的具体类型。
如果无法完成推导,并且又没有传递具体的类型,默认为空对象。
泛型可以设置默认值。
# 函数中如何使用泛型
在函数名称后添加<类型变量名>
类型变量名一般使用 T
function slice<T>(arr: T[], n: number): T[] {
if (n >= arr.length) return arr;
const n_arr: T[] = new Array(n);
for (let i = 0; i < n; i++) {
n_arr[i] = arr[i];
}
return n_arr;
}
let arr = [1, 2, 3, 4, 5, 7]
console.log(slice<number>(arr, 4));
# 类型别名,类,接口中使用泛型
// ##--类型别名--##
type Wollen<T> = (arr: T[], num: number) => string
// ##--接口--##
interface Hollen<T> {
arr: T[],
}
// ##--类--##
class ArrayTool<T> {
private arrs: T[];
constructor(abrs: T[]) {
this.arrs = abrs;
}
print() {
console.log(this.arrs);
}
add<T>(brr: T[], tar: T): T[] {
brr.push(tar);
return brr;
}
}
let ar = new ArrayTool<string>(['a', 'b', 'c', 'd']);