泛型

# 泛型

在创建函数的时候,容易丢失一些信息(多个位置的类型应该保持一致或有关联的信息)

泛型就是指属于函数、类、接口、类型别名之上的类型。(相当于一个变量)

泛型相当于一个类型变量,在定义时,无法预先知道具体的类型,可以用该变量来代替,只有到调用时,才能确定它的类型。

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']);