我的编程空间,编程开发者的网络收藏夹
学习永远不晚

TypeScrip中泛型的案例详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

TypeScrip中泛型的案例详解

泛型的定义


// 需求一: 泛型 可以支持不特定的数据类型, 要求,传入的参数和返回参数一致

// 这种方式虽然能实现传入和返回的参数一致,但是失去类型参数检验


// 定义泛型解决需求一
// 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)

实现泛型类






// 但是上述定义的表和数据库不能保证传入的数据的正确性
// 版本二
// 定义操作数据库的泛型
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)

到此这篇关于TypeScrip中泛型的案例详解的文章就介绍到这了,更多相关TypeScrip中泛型内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

TypeScrip中泛型的案例详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java中泛型的示例详解

泛型机制在项目中一直都在使用,不仅如此,很多源码中都用到了泛型机制。本文将通过一些示例带大家深入了解一下Java的泛型机制,需要的可以了解一下
2022-11-13

详解Java中的泛型

这篇文章主要介绍了Java中的泛型,当我们不确定数据类型时,我们可以暂时使用一个字母T代替数据类型,例如写一个方法,但是我们不知道它是传递的是什么数据类型,我们就可以使用泛型,到时候只要指明T是什么数据类型,就可以使用了,需要的朋友可以参考下
2023-05-19

Java中泛型使用实例详解

Java中泛型使用泛型作用:泛型:集合类添加对象不用强转反射机制:将泛型固定的类的所有方法和成员全部显示出来 核心代码:ArrayList ff=new ArrayList();Ls ls1=new Ls("薯片",5f);
2023-05-31

java 泛型的详解及实例

java 泛型的详解及实例Java在1.5版本中增加了泛型,在没有泛型之前,从集合中读取每一个对象都需要进行强转,如果一不小心插入了类型错误的对象,在运行时就会报错,给日常开发带来了很多不必要的麻烦,比如以下代码:public class
2023-05-31

C#泛型的使用案例

这篇文章介绍了C#泛型的使用案例,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-13

Java 获取泛型的类型实例详解

Java 获取泛型的类型实例详解Java 泛型实际上有很多缺陷,比如不能直接获取泛型的类型,不能获取带泛型类等。以下方式是不正确的:①.获取带泛型的类的类型Class lstUClazz = List.class
2023-05-31

详解Java和Kotlin中的泛型

详解Java和Kotlin中的泛型?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、泛型类型泛型允许你定义带类型形参的数据类型,当这种类型的实例被创建出来后,类型形参便被替换为
2023-06-15

Java泛型Generic机制实例详解

这篇文章主要为大家介绍了Java泛型Generic机制实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

Kotlin 泛型详解及简单实例

Kotlin 泛型详解概述一般类和函数,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的约束对代码的限制很大。而OOP的多态采用了一种泛化的机制,在SE 5种,Java引用了泛型。泛型,
2023-05-31

golang泛型编程的实用案例

Golang泛型编程的实际应用案例,需要具体的代码示例引言:随着云计算、大数据和人工智能的发展,软件开发工程师面临的挑战日益增加。编程语言的泛型特性能够提供更高效、更灵活的解决方案,而Golang作为一门现代化的编程语言,终于在1.18版
golang泛型编程的实用案例
2024-01-20

Kotlin泛型的型变之路演变示例详解

这篇文章主要为大家介绍了Kotlin泛型的型变之路演变示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-21

编程热搜

目录