当前位置: 首页 > news >正文

typescript 中的泛型

泛型:解决 类、接口、方法的复用性、以及对不特定数据类型的支持

           传入的参数与返回参数类型一致

泛型函数

// T表示泛型,具体什么类型是调用这个方法的时候决定的
function getData<T>(value: T): T {return value
}
getData<number>(123) //参数必须是number
getData<string>('123')

 泛型类

//支持返回数字和字符串两种类型,通过类的泛型实现
class MinClass<T> {public list: T[] = [];add(num: T) {this.list.push(num)}min(): T {var minNum = this.list[0];for (let i = 0; i < this.list.length; i++) {if (minNum > this.list[i]) {minNum = this.list[i]}}return minNum}
}
var m = new MinClass<number>() // 实例化类,并且指定了类的T代表的类型是number
m.add(2)
m.add(5)
m.add(10)
console.log(m.min());

把类当作参数来约束数据传入的类型


class User {username: string | undefined;password: string | undefined
}
class MysqlDb {add(user: User): boolean {console.log(user, 'user');return true}
}
var u = new User()
u.username = 'w'
u.password = '1'var Db = new MysqlDb()
Db.add(u)// 操作泛型类
class TMysqlDb<T> {add(info: T): boolean {console.log(info, 'info');return true}
}
// 给user添加数据
// 定义一个TUser类,进行映射
class TUser {username: string | undefined;password: string | undefined
}
var t = new TUser()
t.username = 't'
t.password = '6'var tb = new TMysqlDb<TUser>()
tb.add(t)class ArticleCate {title: string | undefined;desc: string | undefined;status: number | undefinedconstructor(params: {title: string | undefined,desc: string | undefined,status: number | undefined}) {this.title = params.titlethis.desc = params.descthis.status = params.status}
}
var a = new ArticleCate({ title: '分类', desc: '描述', status: 0 })
var td = new TMysqlDb<ArticleCate>()
td.add(a)

泛型接口

// 方法1
interface ConfigFn {<T>(value: T): T
}
var getData: ConfigFn = function <T>(value: T): T {return value
}
console.log(getData<string>('name'));// 方法2
interface ConfigFn<T> {(value: T): T
}
function getData<T>(value: T): T {return value
}
var myGetData: ConfigFn<string> = getData
console.log(myGetData('20'));
http://www.lryc.cn/news/343772.html

相关文章:

  • 计算方法实验2(补充):列主元消元法解线性方程组
  • Qt扫盲-Qt D-Bus概述
  • 懒洋洋作业讲解
  • vue3 + ts实现canvas绘制的waterfall
  • 代码随想录算法训练营第四十四天
  • 【3dmax笔记】027:配置修改器集、工具栏自定义与加载
  • Reactor模型详解
  • 内存卡罢工,数据危机?别急,有救!
  • python爬虫实战
  • k8s 资源文件参数介绍
  • mac系统安装steam报错-解决办法
  • 这个簇状柱形图怎么添加百分比?
  • Tomact安装配置及使用(超详细)
  • web后端——netbeans ide +jsp+servlet开发学习总结
  • 使用request-try-notifyState流程实现UI控制与状态反馈的完整闭环
  • 屏蔽罩材质和厚度对屏蔽效能的影响
  • Qt简单离线音乐播放器
  • 微信小程序常用的api
  • iOS xib布局
  • UNI-APP_拨打电话权限如何去掉,访问文件权限关闭
  • Git知识点汇总表格总结
  • 漫谈:C语言 奇葩的指针定义规则
  • spring boot中一般如何使用线程池
  • Shader 纹理动画和顶点动画
  • 使用macof发起MAC地址泛洪攻击
  • 力扣:1979. 找出数组的最大公约数(Java)
  • 电瓶车充电桩:潜藏的暴利行业,简单入门到月入万元!
  • mac监听 linux服务器性能可视化(Grafana+Promethus+Node_exporter)
  • 【负载均衡在线OJ项目日记】运行功能开发
  • Qt | QLineEdit 类(行编辑器)