共计 884 个字符,预计需要花费 3 分钟才能阅读完成。
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 实例时规定参数并执行函数就可以啦。