泛型
泛型: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,表示的元素类型;