TypeScript学习: 九、TypeScript的泛型
<h3>泛型的定义</h3><div>
<div> 泛型, 软件开发过程中,我们不仅要创建一致的定义良好的api, 同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供十分灵活的功能。</div>
<div> </div>
<div>在像C#和java这样的语言中,可以使用泛型来创建可重用的组件, 一个组件可以支持多种数据类型的数据。这样用户就可以以自己的数据类型来使用组件。</div>
<div> </div>
<div> 通俗理解,<span style="color: rgba(255, 0, 0, 1)">泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持</span></div>
<div> </div>
</div>
<h3>泛型函数</h3>
<p> 有一个需求: 传入指定的参数类型 返回这个指定的参数类型 比如 要求参数类型是 string 返回 string 要求参数类型是 number返回 number</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 只能返回string 的函数</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getData(val:string):string{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> val + "返回字符串"<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">只能返回number 的函数</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getData1(val:number):number{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> val; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 返回数字</span>
}</pre>
</div>
<p> </p>
<p> 这里用了两个函数去实习功能,如果还需要返回 bloolean 类型是不是还需要再添加多一个函数去实现, 这样实现的话会出现了代码的冗余</p>
<p> 有人就会想到用any类型去实现功能,</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getData2(val:any):any{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> 123; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 返回number</span>
<span style="color: rgba(0, 0, 0, 1)">}
getData2(</span>"string");</pre>
</div>
<p> 用any可以实现功能, 但是会出现这样的错误, 我传入string类型, 返回了number ,不符合要求, 并且使用any类型就是抛弃typeScript的初衷了,放弃了类型检查</p>
<p>使用泛型解决问题:泛型可以支持不特定类型, 实现要求传入类型和返回的类型一致</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> T 表示泛型, 具体什么类型是调用的时候决定的</span>
<span style="color: rgba(0, 0, 255, 1)">function</span> getData<T><span style="color: rgba(0, 0, 0, 1)">(val:T):T{
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> val;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 调用:</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> number类型, 返回number 类型</span>
getData<number>(100<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> string 类型</span>
getData<string>("张三"<span style="color: rgba(0, 0, 0, 1)">);
getData</span><<span style="color: rgba(0, 0, 255, 1)">boolean</span>>(123); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 错误写法 定义Boolean类型,不能传入number类型的参数</span></pre>
</div>
<p> </p>
<p> 如果要求函数返回必须为string类型的 泛型函数写法:</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 泛型函数, 指定返回string类型</span>
<span style="color: rgba(0, 0, 255, 1)">function</span> getData<T><span style="color: rgba(0, 0, 0, 1)">(val:T):string{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> val + "val"<span style="color: rgba(0, 0, 0, 1)">;
}
getData</span><number>(234<span style="color: rgba(0, 0, 0, 1)">);
getData</span><string>("张三");</pre>
</div>
<p> </p>
<p>通过这两个例子可以看出 泛型 T 代表的是一种数据类型, 具体是什么数据类型,就是要调用该方法的时候传入指定的类型来确定的 。 </p>
<p> getData<T> getData<string> 该函数里面的所有T 都是泛型 </p>
<h3>泛型类</h3>
<div>需求:比如有个最小的堆算法, 需要同时支持返回数字和字符串两种类型, 通过类的泛型来实现</div>
<div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 不适用泛型类的写法</span>
<span style="color: rgba(0, 0, 0, 1)">class MinClass{
public list:number[] </span>=<span style="color: rgba(0, 0, 0, 1)"> [];
add(num:number):void{
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.list.push(num);
}
min():number {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> minNum = <span style="color: rgba(0, 0, 255, 1)">this</span>.list;
</span><span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">var</span> i = 0; i < <span style="color: rgba(0, 0, 255, 1)">this</span>.list.length; i++<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(minNum > <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.list) {
minNum </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.list;
}
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> minNum;
}
}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> m = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MinClass();
m.add(</span>2<span style="color: rgba(0, 0, 0, 1)">);
m.add(</span>50<span style="color: rgba(0, 0, 0, 1)">);
m.add(</span>1<span style="color: rgba(0, 0, 0, 1)">);
console.log(m.min());</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出: 1</span></pre>
</div>
<p> 这个列子可以实现的是number类型的最小堆算法,对于类型校验,不能使用string的类型</p>
<p>看看 泛型类的实现</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 泛型类</span>
class MinClass<T><span style="color: rgba(0, 0, 0, 1)">{
public list:T[] </span>=<span style="color: rgba(0, 0, 0, 1)"> [];
add(num:T):void{
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.list.push(num);
}
min():T {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> minNum = <span style="color: rgba(0, 0, 255, 1)">this</span>.list;
</span><span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">var</span> i = 0; i < <span style="color: rgba(0, 0, 255, 1)">this</span>.list.length; i++<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(minNum > <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.list) {
minNum </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.list;
}
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> minNum;
}
}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> m = <span style="color: rgba(0, 0, 255, 1)">new</span> MinClass<number><span style="color: rgba(0, 0, 0, 1)">(); // 实例化 类, 并且指定了泛型 的类型 为number
m.add(</span>2<span style="color: rgba(0, 0, 0, 1)">);
m.add(</span>50<span style="color: rgba(0, 0, 0, 1)">);
m.add(</span>1<span style="color: rgba(0, 0, 0, 1)">);
console.log(m.min());</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出: 1</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> s = <span style="color: rgba(0, 0, 255, 1)">new</span> MinClass<string><span style="color: rgba(0, 0, 0, 1)">();
s.add(</span>"n"<span style="color: rgba(0, 0, 0, 1)">);
s.add(</span>"a"<span style="color: rgba(0, 0, 0, 1)">);
s.add(</span>"z"<span style="color: rgba(0, 0, 0, 1)">);
console.log(s.min());</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出: a 码值计算</span></pre>
</div>
<p>使用泛型了, 可以写入number类型和string类型 </p>
<p> </p>
<p><strong>--- 泛型类--- 进阶</strong></p>
<p> 要求:定义一个类,把类当作参数,来约束传入的数据类型</p>
<p> 实现:定义一个user的类,这个类的作用是映射数据库字段, 然后定义个mysqlDb的类,用于操作数据库,然后把User类当作参数传入到mysqlDb执行</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 映射数据库字段的实体类</span>
<span style="color: rgba(0, 0, 0, 1)">class User{
public username:string </span>|<span style="color: rgba(0, 0, 0, 1)"> undefined;
public pasword:string </span>|<span style="color: rgba(0, 0, 0, 1)"> undefined;
constructor() {
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 数据库操作类型</span>
<span style="color: rgba(0, 0, 0, 1)">class MysqlDb{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 添加数据</span>
add(user:User):<span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 删除数据</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 修改数据</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> ----</span>
<span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> u = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> User();
u.username </span>= "张三"<span style="color: rgba(0, 0, 0, 1)">;
u.pasword </span>= "123"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> Db = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MysqlDb();
Db.add(u);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 把这个user添加到数据库中</span></pre>
</div>
<p> </p>
<p> 这个 MysqlDb 可以执行 user类 的添加等操作, 同样的问题:这个MysqlDb 只能对user 类进行操作, 如果我还有其他的表:</p>
<p> </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">class ArticleCate{
title:string </span>|<span style="color: rgba(0, 0, 0, 1)"> undefined;
desc:string </span>|<span style="color: rgba(0, 0, 0, 1)"> undefined;
status:number </span>|<span style="color: rgba(0, 0, 0, 1)"> undefined;
constructor() {
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 数据库操作类型</span>
<span style="color: rgba(0, 0, 0, 1)">class MysqlDb{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 添加数据</span>
add(info:ArticleCate):<span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)">{
console.log(info);
</span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 删除数据</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 修改数据</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> ----</span>
<span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> art = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ArticleCate();
art.status </span>= 1<span style="color: rgba(0, 0, 0, 1)">;
art.desc </span>= "国内新闻"<span style="color: rgba(0, 0, 0, 1)">;
art.title </span>= "国内"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> Db = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MysqlDb();
Db.add(art);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 把这个ArticleCate添加到数据库中</span></pre>
</div>
</div>
<p>是不是这样就出现了代码的冗余, 有多个要操作的实体类,就要定义多个 MysqlDb 去实现</p>
<p>来看看泛型如何实现, 把 MysqlDb 就封装一次</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 映射数据库字段的实体类</span>
<span style="color: rgba(0, 0, 0, 1)">class User{
public username:string </span>|<span style="color: rgba(0, 0, 0, 1)"> undefined;
public pasword:string </span>|<span style="color: rgba(0, 0, 0, 1)"> undefined;
constructor() {
}
}
class ArticleCate{
title:string </span>|<span style="color: rgba(0, 0, 0, 1)"> undefined;
desc:string </span>|<span style="color: rgba(0, 0, 0, 1)"> undefined;
status:number </span>|<span style="color: rgba(0, 0, 0, 1)"> undefined;
constructor() {
}
}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> art = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ArticleCate();
art.status </span>= 1<span style="color: rgba(0, 0, 0, 1)">;
art.desc </span>= "国内新闻"<span style="color: rgba(0, 0, 0, 1)">;
art.title </span>= "国内"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> DbArt = <span style="color: rgba(0, 0, 255, 1)">new</span> MysqlDb<ArticleCate>(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 直接实例化 mysqlDb</span>
DbArt.add(art);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 把这个ArticleCate添加到数据库中</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> user = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> User();
user.username </span>= "张三"<span style="color: rgba(0, 0, 0, 1)">;
user.pasword </span>= "24123"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> DbUser = <span style="color: rgba(0, 0, 255, 1)">new</span> MysqlDb<User><span style="color: rgba(0, 0, 0, 1)">();
DbUser.add(user); </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 把这个User添加到数据库中</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> DbUser.add(123); // 错误写法, 有类型校验</span></pre>
</div>
<p> </p>
<p>所以泛型, 不仅可以代表基本数据类型, 也可以是定义的类</p>
<h3> </h3>
<h3>泛型接口</h3>
<p>先来看一个函数接口</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 函数接口</span>
<span style="color: rgba(0, 0, 0, 1)">interface ConfigFn{
(val: string, val2: string):string;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 实现接口</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> getData:ConfigFn = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(val1:string, val2:string):string{
</span><span style="color: rgba(0, 0, 255, 1)">return</span> val1 +<span style="color: rgba(0, 0, 0, 1)"> val2;
}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> str:string = getData("张三", "李四"<span style="color: rgba(0, 0, 0, 1)">);
console.log(str);</span></pre>
</div>
<p> </p>
<p> 再来看看泛型接口</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 泛型函数接口</span>
<span style="color: rgba(0, 0, 0, 1)">interface ConfigFn{
</span><T><span style="color: rgba(0, 0, 0, 1)">(val: T, val2: T):T;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 实现泛型函数接口</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> getData:ConfigFn = <span style="color: rgba(0, 0, 255, 1)">function</span><T><span style="color: rgba(0, 0, 0, 1)">(val1:T, val2:T):T{
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> val1;
}
</span><span style="color: rgba(255, 0, 0, 1)">var str:string = getData<string>("张三", "李四"</span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)">);</span>
console.log(str);</span></pre>
</div>
<p> </p>
<p> 实现泛型接口的时候, 不指定泛型类型, 到调用的时候再指定类型</p>
<p>另外一种写法</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 泛型函数接口的另外一种写法</span>
interface ConfigFn<T><span style="color: rgba(0, 0, 0, 1)"> {
(val: T, val2: T):T;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 定义函数</span>
<span style="color: rgba(0, 0, 255, 1)">function</span> getData<T><span style="color: rgba(0, 0, 0, 1)">(val1:T, val2:T):T{
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> val1;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 实现接口, 并且指定类型</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> myGetData:ConfigFn<string> =<span style="color: rgba(0, 0, 0, 1)"> getData;
myGetData(</span>"张三", "李四");</pre>
</div>
<p><span style="color: rgba(255, 0, 0, 1)">注意: 实现泛型接口,本身也要是一个泛型</span></p>
<p> </p>
<p> </p>
<p>有了泛型, 调用方法的时候,同样的代码,可供多个类型使用,大大的扩展了代码的复用性 </p>
<p> </p>
<p> </p>
<h2>使用 类,接口,泛型, 实现SQL底层封装</h2>
<p> sql 数据库类的简单功能有: 查询, 添加, 修改, 删除 ,先从这四个功能起封装库类, 先定义一个泛型接口</p>
<div class="cnblogs_code">
<pre>// 定义基础接口
interface DBI<T><span>{
add(info:T): boolean<span>;
update(info:T,id:number): boolean<span>;
delete(id:number): boolean<span>;
get(id:number): any[];
}</span></span></span></span></pre>
</div>
<p> </p>
<p> 简单实现接口, 注意: 要实现泛型接口, 这个类也是必须是泛型类</p>
<div class="cnblogs_code">
<pre>// 定义一个操作mysql数据库类, 实现接口, 注意要实现泛型接口, 这个类也是泛型类
class MysqlDb<T> implements DBI<T><span> {<br></span></pre>
<div>
<div> constructor() {</div>
<div> // 数据库建立连接-------</div>
<div> }</div>
</div>
<pre><span>
add(info: T): boolean<span> {
throw new Error("Method not implemented."<span>);
}
update(info: T, id: number): boolean<span> {
throw new Error("Method not implemented."<span>);
}
delete(id: number): boolean<span> {
throw new Error("Method not implemented."<span>);
}
get(id: number): any[] {
throw new Error("Method not implemented."<span>);
}
}
// 实现sqlserver 的数据库类
class SqlserverDb<T> implements DBI<T><span> {<br></span></span></span></span></span></span></span></span></span></pre>
<div>
<div> constructor() {</div>
<div> // 数据库建立连接-------</div>
<div> }</div>
</div>
<pre><span>
add(info: T): boolean<span> {
throw new Error("Method not implemented."<span>);
}
update(info: T, id: number): boolean<span> {
throw new Error("Method not implemented."<span>);
}
delete(id: number): boolean<span> {
throw new Error("Method not implemented."<span>);
}
get(id: number): any[] {
throw new Error("Method not implemented."<span>);
}
}</span></span></span></span></span></span></span></span></pre>
</div>
<p> </p>
<p>实现mysql数据类操作User数据表,, 使用泛型, 把类当作参数来约束方法</p>
<div class="cnblogs_code">
<pre>// 定义实体类, 映射数据库表的类
<span>class User{
id: number |<span> undefined;
userName:string |<span> undefined;
password:string |<span> undefined;
}
var user = new<span> User();
user.id = 1<span>;
user.userName = "tom"<span>;
user.password = "12345678"<span>;
// 实现user类的数据库操作
var UserMysql = new MysqlDb<User>();</span></span></span></span></span></span></span></span></pre>
</div>
<p> </p><br><br>
来源:https://www.cnblogs.com/yangWanSheng/p/15417092.html
頁:
[1]