说实话,我从接触typescript开始,很少很少接触范型,因为不用他也能完成基本的需求,但是当别人说起来的时候,我们也不应该啥也不知道。先记住这一个例子,慢慢的你就大彻大悟了。
事情是这样的,我要用ts写一个函数,实现判断两个简单数组中的内容是否相等(注意,这个方法有问题,有重复数据的数组的不能正确判定是否相等,在这里就是一个例子,正确方法请看这篇文章),于是乎我这样写
export function arrayContentEqual(arr1: Array, arr2: Array): boolean {
let flag = true
if (arr1.length !== arr2.length) {
flag = false
} else {
arr1.forEach(item => {
if (arr2.indexOf(item === -1)) {
flag = false
}
})
}
return flag
}
这样写完之后,有类型错误,很显然,需要指定数组的类型
但是,我无法现在就指定数组的类型,因为可能是string,也可能是number,所以我们可以使用范型做一个标记,通常用大写的T标记【这里T只是一个符号,你想用A, B也行,用啥都行】
export function arrayContentEqual<T>(arr1: Array<T>, arr2: Array<T>): boolean {
let flag = true
if (arr1.length !== arr2.length) {
flag = false
} else {
arr1.forEach((item: T) => {
if (arr2.indexOf(item) === -1) {
flag = false
}
})
}
return flag
}
这样我们在调用这个函数的时候,传入两个arr参数,就会自动进行类型推导!!