1. 概念:

child::泛型

2. 函数使用泛型参数的语法:

2.1. 声明函数语法:

function 函数名<泛型参数名 extends 其他类型 = 默认类型>(参数1: 类型): 类型 {
    //代码中可以使用 泛型参数名 作为一种类型
}

2.1.1. 说明:

2.1.1.1. 需要在函数名后加上<泛型参数名 extends 其他类型 = 默认值>

2.1.1.1.1. 其中extends 其他类型为可选参数, 是用来约束泛型的, 用来缩小泛型的类型范围, 详见泛型约束
2.1.1.1.2. 其中= 默认值为可选参数

2.2. 调用函数的语法:

函数名<实际数值的类型>(参数)

2.2.1. 参数说明:

  1. <实际数值的类型>通常省略, ts会根据传入实参的类型对泛型参数赋值

给泛型约束过的变量赋值的语法

泛型实例化-泛型赋值-泛型变量赋值

实例:

function main<T extends string>(data: T) {
    let rst: T
    rst = <T>'6666'
    //下面这个是错误的:(因为string不是T类型)
    //rst = '6666'
    return rst
}
console.log(main('df'))//6666

实例:

function main<T extends string>(data: T) {
    let rst: T[]
    rst = <T[]>['6666']
    return rst
}
console.log(main('df'))//['6666']

3. 使用泛型参数的类的语法

3.1. 定义类语法:

与函数定义相同, 也是在类名后加上泛型参数

3.2. 使用带有泛型参数的类的构造方法创建对象语法:

new 类名<类型实参>()

3.2.1. 说明:

可以省略指定类型实参, 因为ts会自动推断类型

4. 类型使用泛型参数的语法:

4.1. 函数类型使用泛型参数语法:

函数:

<泛型参数名 extends 其他类型 = 默认值>(参数1: 类型)=> 返回类型;

与函数类似

5. 接口使用泛型参数的语法:

5.1. 梗概:

定义接口时候, 在接口名字后面紧跟一个泛型参数 调用这个接口作为类型的时候, 要传入实际类型作为泛型的实参