泛型
解决函数传入参数类型与函数返回值类型一致的问题。
一个函数,我希望传入数字,返回数字;传入字符串,返回字符串, 即
function fn1 (a: number): number {
return a + 1
}
function fn2 (b: string): string {
return b + ' :fn2'
}
有没有支持不同类型的方式,any
function fn3 (c: any): any {
return c
}
可是使用any,不能保证返回值类型和传入参数类型属于相同类型
使用泛型!
function fn1<T>(a: T): T{
return a + 1
}
可以看到,使用尖括号即可使用泛型函数
还有一种方式使用泛型函数:类型推断,什么也不用做,智能判断
有个问题,下面的泛型函数,函数体中访问了参数的length
属性,如果传入参数属字符串或数组,没问题,但如果是number
类型呢,length
属性肯定是undefined
function fn1<T>(a: T): T{
console.log(a.length)
return a + 1
}
使用泛型变量, 声明泛型数组即可
function fn1<T>(a: T[]): T[]{
console.log(a.length)
return a + 1
}