TypeScript - 泛型 Generics

57 阅读2分钟

泛型就是指在定义函数、接口、类的时候没有指定具体的类型,等到使用的时候在去指定具体类型的一种特征。以函数为例,简单点说就是在声明这个函数时不去指定具体的类型。等到调用它的时候,才去传递一个具体的类型。这样做的目的就是为了极大程度的复用代码,

// 创建一个指定长度的数组
function createNumberArray (length: number, value: number):number[] {
    const arr = Array<number>(length).fill(value);
    return arr
}
const res1 = createNumberArray(3, 100)

如果我们还需要它可以创建一个,字符串类型的数组上面的函数就做不到了。这里最笨的办法就是再去定义一个叫做 creatStringArray 的函数,函数的逻辑都是一样的只不过 value 的类型是 spring 。

// 创建指定长度的数组
function createStringArray (length: number, value: string):string[] {
    const arr = Array<srting>(length).fill(value);
    return arr
}
const res2 = createStringArray(3,‘100’)

这样就可以看到两个函数实现的都是相同逻辑,重写两边就是冗余。更合理的办法就是使用泛型,说白了就是把这里的 string 或者 number 去变成一个参数。就是把类型变成一个参数,在调用的时候再去传递这个类型。去使用泛型具体就是在函数名后面去使用<泛型参数>,一般泛型参数都会以 T 作为名称,然后把函数当中不明确的类型都该用 T 去代表。

// 创建指定长度的数组
finction createArray<T> (length:number, value: T):T[] {
    const arr = Array<T>(length).fill(value)
    return arr
}
const string_arr = creatArray<string>(3, 'foo')
const number_arr = creatArray<number>(3, 100)

总结:总的来说泛型就是把定义时不能够明确的类型,变成一个参数然我们在使用的时候,再去传递这样的一个类型参数。