【笔记】TS的泛型

前言

TS的泛型学习笔记

函数

定义函数时指定泛型类型

1
2
3
function 函数名<泛型类型>() {
...
}
1
2
3
function 函数名<泛型类型 = 默认数据类型>() {
...
}

调用函数时指定泛型类型

1
函数名<泛型类型>();

泛型自动类型推导

1
2
3
4
5
function 函数名<泛型类型>(形参名: 泛型类型) {
...
}

函数名(实参);

定义类时指定泛型类型

1
2
3
class 类名<泛型类型> {
...
}
1
2
3
class 类名<泛型类型 = 默认数据类型> {
...
}

创建对象时指定泛型类型

1
let 变量名 = new 类名<泛型类型>();

泛型自动类型推导

1
2
3
4
5
6
7
8
9
class 类名<泛型类型> {
private _属性名: 数据类型;

constructor(属性名: 泛型类型) {
this._属性名 = 属性名;
}
}

let 变量名 = new 类名(实参);

接口

定义接口时指定泛型类型

1
2
3
interface 接口名<泛型类型> {
...
}
1
2
3
interface 接口名<泛型类型 = 默认数据类型> {
...
}

使用接口时指定泛型类型

1
let 变量名: 接口名<泛型类型>;

泛型约束

约束泛型类型的数据结构

1
2
3
4
5
6
7
interface 接口名 {
...
}

function 函数名<泛型类型 extends 接口名>() {
...
}

约束泛型类型为对象所有属性的联合类型

1
2
3
4
5
6
7
8
interface 接口名 {
属性名1: 数据类型;
属性名2: 数据类型;
}

function 函数名<泛型类型 extends keyof 接口名>() {
...
}

完成