typedef和var有什么不同(TypeScrip中泛型的案例详解)
类别:编程学习 浏览量:1610
时间:2021-09-30 00:41:18 typedef和var有什么不同
TypeScrip中泛型的案例详解泛型的定义// 需求一: 泛型 可以支持不特定的数据类型, 要求,传入的参数和返回参数一致 // 这种方式虽然能实现传入和返回的参数一致,但是失去类型参数检验 /* 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)
到此这篇关于TypeScrip中泛型的案例详解的文章就介绍到这了,更多相关TypeScrip中泛型内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
标签:TypeScript 泛型
您可能感兴趣
- 数据类型typescript知多少(一文了解TypeScript数据类型)
- typescript使用技巧(深入理解typescript中的infer关键字的使用)
- TypeScript定义接口(interface)案例教程(TypeScript定义接口interface案例教程)
- typescript怎么加号(Typescript中的as、问号与感叹号详解)
- react新手指引页面编写(React+TypeScript进行项目构建案例讲解)
- typescript获取属性名(TypeScript 中如何限制对象键名的取值范围)
- typescript技巧(为什么TypeScript的Enum会出现问题)
- typescript开发后端(教你使用webpack打包编译TypeScript代码)
- 0 1 岁婴儿最强作息指南,照着做养出天使宝宝(01岁婴儿最强作息指南)
- 沪上这16所高校 萌新 礼包开箱 哪一款让你心动(沪上这16所高校萌新)
- 她救了被绑架的他,而这一切竟是一场阴谋...(她救了被绑架的他)
- 冬季养殖这6种阴生植物,方便又好养,你家有么(冬季养殖这6种阴生植物)
- 阴生植物为什么不怕照不到阳光(阴生植物为什么不怕照不到阳光)
- 阴生环境 耐阴地被植物,你知道哪些(阴生环境耐阴地被植物)
热门推荐
- 织梦cms漏洞大全(织梦CMS利用php正则让文章的外链自动加nofollow)
- sqlserver设置自动备份的注意事项(SQL server 定时自动备份数据库的图文方法)
- mysql 查询语法常见问题(MySQL 异常有这一篇就够了!)
- php创建多个文件(PHP实现单文件、多个单文件、多文件上传函数的封装示例)
- SQL Server的恢复模式
- php重定向网页(phpStudy V8设置301重定向跳转的实现方法)
- 面试时自我介绍怎么说
- 延迟加载js文件
- mysql查询逗号分割字符串(MySQL 字符串拆分实例无分隔符的字符串截取)
- dedecms标题在哪改(织梦DEDECMS文章拼音命名规则时去掉id的方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8