乐趣区

TS学习笔记范型

1. 首先举个直白的小 demo 解释下为什么需要范型

1. 我们这里写了一个函数,传入的参数我们规定是 number 类型。代码如下

接着如果我们又要写一个函数实现的业务跟上面这个一样,但传入的参数类型却规定要 string
那我们就得重新写一个一模一样的函数,函数内的代码如果很多很多,那显然这是不可取的。

那如果我们把他的类型规定成 any 不就可以了吗,但是这样做的话就失去了类型检测的意义。
我们既需要一定的类型检测又不想出现代码冗余,范型就很好的解决了这一问题。
范型的作用:让我们在调用一个函数时可以自定义参数类型。就是把约束的能力交给调用者。

2. 范型的用法


函数内的 T 代表的就是待会儿使用者要规定的类型。
若如 54 行你规定了 number 类型,传入的数据却是 string 类型则会报错。
以上就是范型的定义和范型的函数。

3. 范型类

举个栗子:需要一个类 new 一个实例实现一个方法像一个数组里增加数据,然后实现一个方法打印数组里的最小值。
一般我们会这样写:

那如果我们像数组里传入的数据不一定是 number 类型,还需要 string 那可咋整呢,如 abcd,依据 ascall 码值得出最小值。
那我们就得重写一个类和方法声明传入的参数为 string 这明显是不必要的操作。
那下面我们就用范型类解决这一问题。

这样我们就可以在 new 一个实例时自定义规范的类型。简化了冗余的代码。

4. 范型接口 范型类接口

之前我们写过的函数类型接口如下:

接下来我们把它改造成一个范型接口
写法一:

写法二:

5. 把类作为参数类型的范型类

下面我们看看把类作为参数的范型类,我们来做以下操作。


首先定义一个 User 类作为映射数据库字段
然后定义一个 MysqlDb 的类用于操作数据库
然后把 User 类作为参数传入到 MysqlDb 中。

接着我们又需要一个 ArticleCate 类实现跟刚刚差不多的操作。
那我们又得重写下这个 MysqlDb

接下来我们就用范型类来简化这些操作。
且新建了 update 模拟数据库操作,
因为 update 需传入参数,那我们就可以直接在 ArticleCate 类里书写构造器并规定传入的参数。
最后每次 new 实例时规定参数并执行函数就可以啦。

退出移动版