泛型(TypeScript学习笔记)

136 阅读1分钟

泛型

解决函数传入参数类型与函数返回值类型一致的问题。

一个函数,我希望传入数字,返回数字;传入字符串,返回字符串, 即

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
}