Skip to content

泛型

泛型:Generics,是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性 也就是说,泛型是允许同一个函数接受不同类型参数的一种模版,与any相比,使用泛型来创建可服用的组件要更好,因为泛型会保留参数类型(PS:泛型是整个TS的重点,也是难点,请多多注意~)

泛型语法

ts
function fun<T>(data: T[]): T[] {
  return data.sort()
}
let data = fun<string>(['113'])

多类型泛型

ts
function fun<T, A>(data: (T | A)[]): (T | A)[] {
  return data.sort()
}

let data = fun<string, number>(['113', 123])

泛型类型别名

ts
type Info<T> = {
    username?: T
    age?: T
}

let user: Info<string> = {username:'zs', age: 20}

泛型接口

ts
interface Info<T> {
  username: T
}

let user: Info<string> = { username: '123' }
let user1: Info<string> = { username: 123 } //error

泛型类

ts
class Person<T> {
  username: T
  constructor(username: T) {
    this.username = username
  }
  getName(): T {
    return this.username
  }
}

let user = new Person<string>('zs')

泛型默认参数

所谓默认参数,是指定类型,如默认值一样,从实际值参数中也无法推断出类型时,这个默认类型就会起作用。

ts
function fun<T = number>(data: T[]): T[] {
  return data.sort()
}

let data = fun<string>(['113'])

泛型常用字母

  • T:代表Type,定义泛型时通常用作第一个类型变量名称
  • K:代表Key,表示对象中的键类型;
  • V:代表Value,表示对象中的值类型;
  • E:代表Element,表示的元素类型;

Released under the MIT License.