泛型的定义
// 需求一: 泛型 可以支持不特定的数据类型, 要求,传入的参数和返回参数一致
// 这种方式虽然能实现传入和返回的参数一致,但是失去类型参数检验
/*
function getData(value: any): any {
return "success"
}
*/
// 定义泛型解决需求一
// T表示泛型(这里的大写字母可以随便定义,但一般默认为T) 具体什么类型是调用这个方法的时候决定的
function getData<T>(value: T):T{
return value;
}
// 传入的字符串类型
var get = getData<string>("hello")
console.log(get)
// 传入的类型为数字
var getTwo = getData<number>(666)
console.log(getTwo)
// 需求二:比如有个最小堆算法,需要同时支持返回数字和字符串两种类型,通过类的泛型来实现
// 定义类的泛型
class minCla<T> {
list: T[] = [];
add(value: T):void {
this.list.push(value);
}
min(): T {
var minNum = this.list[0];
for(var i=0; i<this.list.length; i++) {
if (minNum > this.list[i]) {
minNum = this.list[i]
}
}
return minNum
}
}
var minNum = new minCla<number>();
minNum.add(2);
minNum.add(1);
minNum.add(7);
console.log(minNum.min()); // 返回 1
// 字符的比较是按ascii码比较的
var minNumTwo = new minCla<string>();
minNumTwo.add("c");
minNumTwo.add("z");
minNumTwo.add("a");
console.log(minNumTwo.min()) // 返回a
泛型的接口
// 实现泛型接口的两种方式
// 方式一:
// 定义一个泛型接口
interface Func {
<T>(value: T): T
}
// 定义一个函数实现泛型接口
var f: Func = function<T>(value: T) {
return value;
}
f<string>("hello")
f<number>(666)
// 方式二:
interface FuncONe {
<T>(value: T): T
}
var f1: FuncONe = function<T>(value: T):T {
return value;
}
f1<string>("world")
f1<number>(666)
实现泛型类
/*
1、定义一个User类,这个类的作用是映射数据库字段
2、然后定义一个MysqlDb的类这个类用于操作数据库
3、然后把User类作为参数传入到MysqlDb中
*/
/*版本一:
class User {
usernam: string | undefined;
password: string | undefined;
}
class MysqlDb {
add(user: User): boolean {
console.log(user);
return true;
}
}
var u1 = new User();
u1.usernam = "pika";
u1.password = "pika"
var msql = new MysqlDb();
msql.add(u1);
*/
// 但是上述定义的表和数据库不能保证传入的数据的正确性
// 版本二
// 定义操作数据库的泛型
class MysqlDb <T>{
add(info: T): boolean {
console.log(info);
return true;
}
}
// 定义一个user类和数据库进行映射
class User {
usernam: string | undefined;
password: string | undefined;
}
var u1 = new User();
u1.usernam = "pika";
u1.password = "pika"
// 实例化一个数据库(类当成一个参数来约束传入参数的类型)
var msql = new MysqlDb<User>();
msql.add(u1); // 保证传入数据的格式是User类型的
综合案例
需求:
功能: 定义一个操作数据库的库 支持Mysql MongoDb
要求1: Mysql MongoDb功能一样,都有add update delete get方法
注意: 约束统一的规范、以及代码重用
解决方案: 需要约束规范所以要定义接口,需要代码重用所以用到泛型
1、接口: 在面向对象编程中,接口是一种规范的定义,它定义了行为和动作的规范
2、泛型:通俗理解:泛型就是解决 类 接口 方法的复用性
*/
// 实现流程:
// 定义一个接口,对所有方法的约束
interface DbMethod<T> {
add(info: T): boolean;
update(info: T, id: number): boolean;
delete(id: number): boolean;
get(id: number): boolean;
}
// 定义一个Mysql数据库类,注意:要实现泛型接口 这个类也应该是一个泛型类
class MysqlDbs<T> implements DbMethod<T> {
add(info: T): boolean {
console.log(info);
return true;
}
update(info: T, id: number): boolean {
var obj = {
username: "xxxx",
password: "666"
}
return true
}
delete(id: number): boolean {
console.log("delete success");
return true
}
get(id: number): boolean {
var arr = [
{username: "xxx",
password: "xxxxx"
}
];
return true
}
}
// 测试:
class Users {
username: string | undefined;
password: string | undefined;
};
// 使用Users类来约束传入的参数正确性
var mysql = new MysqlDbs<Users>();
var u = new Users();
u.username = "xxxx"
u.password = "xxxxxx"
// 模拟数据库的增删改查
mysql.add(u);
mysql.get(1);
mysql.update(u, 1);
mysql.delete(1)
// 定义一个MongoDb数据库类,注意:要实现泛型接口 这个类也应该是一个泛型类
class MongoDb<T> implements DbMethod<T> {
add(info: T): boolean {
console.log(info);
return true;
}
update(info: T, id: number): boolean {
var obj = {
username: "xxxx",
password: "666"
}
return true
}
delete(id: number): boolean {
console.log("delete success");
return true
}
get(id: number): boolean {
var arr = [
{username: "xxx",
password: "xxxxx"
}
];
return true
}
}
// 测试:
class Userd {
username: string | undefined;
password: string | undefined;
};
// 使用Users类来约束传入的参数正确性
var mysql = new MongoDb<Userd>();
var u = new Userd();
u.username = "xxxx"
u.password = "xxxxxx"
// 模拟数据库的增删改查
mysql.add(u);
mysql.get(1);
mysql.update(u, 1);
mysql.delete(1)
相关推荐:
AI缩写文本:助力智能生活的革新力量,ai智能写作生成神器下载
SEO观察:2025年搜索引擎优化的新趋势与机遇,seo2是什么状态
seo网站反链是什么,网站反链怎么做 ,ai插画头像卡通
AI一键生成文章在线:提升创作效率,改变写作方式
SEO走动:提升网站流量的关键一步,SEO数据监控宝宝推荐
文章AI生成软件高效创作新纪元
SEO手法如何通过精准优化提升网站排名,获取海量流量,网站建设协议流程是什么
为什么“未备案域名”会成为互联网行业中的重要问题?,江干区seo优化价格
seo读什么书,seo是哪个专业的 ,亚洲9ai吧
WPJam:打破网站管理的壁垒,打造极致用户体验,广东谷歌seo工具
《SEO教材:打造网站流量的核心利器,教你轻松SEO优化技巧》,咖啡网站建设总结文案
SEO总结:如何通过优化提升网站排名与流量,关键词排名消失
seo需要什么人才,seo需要做什么工作 ,探索ai照片
seo用什么手法,seo方式 ,ai绘画飞翔
SEO人工优化-让你的网页轻松登上搜索引擎首页,ai主母
seo规范是什么意思,seo包括哪些内容 ,AI智能破解
GoogleGTP-智能时代的革命性突破,人工智能的新纪元,ai可以降论文ai率吗
AI人工智能:改变未来的科技革命
seo经验是什么,seo进阶 ,ai矿机
ChatGPT:人工智能对话新时代的领航者,ai音响华为还是小米好
seo跟sem是什么,seo和sem的概念 ,惠威的ai功能
SEO组织:让您的网站流量倍增的秘密武器,seo 绩效标准
seo适合什么职业,seo有前途么 ,ai小精灵
WPJVX:开启数字化未来的智慧平台,关键词排名技术咨询乐云seo
ChatGPT-01:开创人工智能新纪元,AI如何画模糊的云层
什么是seo运营,什么是seo营销 ,ai绘画沙地
ChatGPT在处理文本时可能无法完全理解上下文的复杂性,肌肉ai
SEO新闻:2025年最新趋势与最佳实践,你不可错过的SEO战略,郑州网络营销推广的优势
SEO全套秘籍:提升网站流量与排名的终极指南,荣昌手机网站建设
SEO开发:数字营销的核心驱动力,园区网站建设
seo组建需要什么条件,seo建站的步骤 ,ai肌肉宝宝
SEO小白必看!从零起步SEO的秘诀,轻松提升网站排名,南京网站运营优化平台
什么是seo如何进行seo,何谓seo ,红米的AI摄影什么意思
ChatGPT点不了?背后的真相与解决方法,ai.520523
SEO获取流量的必杀技:如何通过优化轻松提升网站排名,德州全网营销推广价格
SEO对策:提升网站排名与流量的必备策略,SEO入门相机平价学生
360关键:打造全方位安全保护,守护您的数字世界,ai乘bi
OpenPose大白话解释:让你轻松理解姿态识别的神奇技术,ai天天晴
seo自己做什么,自己做seo需要花钱吗 ,ai850775
AI网页版本:开启智能时代的新篇章,拼音标调ai
seo网站排名优化哪家好,seo网站优化平台 ,ai斗蟋
企业营销:如何在竞争激烈的市场中脱颖而出,美装网站Seo优化
专业SEO方案助力企业网站流量暴增,精准引流不再是难题,网站建设合同4篇
SEO关键词的选择步骤:让你的网站在搜索引擎中脱颖而出,ai书法化
seo都有什么问题,seo都有什么问题和答案 ,ai凯旋公主下载
文章续写AI:提升写作效率,创意无限
什么是seo优化营销,seo主要优化什么 ,ai绘画国风古韵
AI自动生成:开启智能时代的无限可能,ai熊熊图片
企业关键字-助力企业成功的隐形动力,闽侯县企业网站建设
怎么用AI生成文章免费版,高效创作从此开始!