Typescript 中的 泛型
typeScript 中的泛型
1. 泛型的定义
泛型:软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。
在像 C# 和 Java 这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。这样用户就可以自己的数据类型来使用组件。
通俗理解:泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持。
泛型: 可以支持不特定的数据类型。 要求: 传入的参数和返回的参数一致
T表示泛型,具体什么类型是调用这个方法的时候决定的
2. 泛型函数
function getData<T>(value:T):T {
return value;
}
getData<number>(123);
getData<number>('13') // 错误的写法
3. 泛型类
// 比如有个最小堆算法 普通类型
class MinClass{
public list:number[]=[];
add(num:number){
this.list.push(num)
}
min():number{
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 m1 = new MinClass();
m1.add(12);
m1.add(2);
m1.add(4);
m1.add(1);
alert(m1.min());
// 泛型类
class MinClass<T>{
public 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 m1 = new MinClass<number>();
m1.add(12);
m1.add(2);
m1.add(4);
m1.add(1);
alert(m1.min());
var m2 = new MinClass<string>(); // 实例化类 并且指定了类的T代表的类型是string
m2.add('a');
m2.add('b');
m2.add('c');
alert(m2.min());
4. 泛型接口
// 第一种定义方式
interface ConfigFn{
<T>(value:T):T;
}
var getData:ConfigFn = function<T>(value:T):T {
return value;
}
getData<number>(123);
getData<number>('123') // 错误写法
// 第二种定义方式
interface ConfigFn<T>{
(value:T):T;
}
function getData<T>(value:T):T{
return value;
}
var myGetData:ConfigFn<string> = getData;
myGetData('123');
myGetData(123);
5. 把类作为参数类型的泛型类
1. 定义一个类
2. 把类作为参数来约束数据传入的类型
/*
定义一个 User的类,这个类的作用就是映射数据库字段
然后定义一个 MysqlDb的类,这个类用于操作数据库
然后把User类作为参数传入到MysqlDb中
var user = new User({
username: '张三',
password: '123456'
});
var Db = new MysqlDb();
Db.add(user);
*/
class User{
username:string | undefined;
password:string | undefined;
}
class MysqlDb<T>{
add(info:T):boolean{
console.log(info);
return true;
}
}
var u = new User();
u.username = '李斯';
u.password = '1232123';
var Db = new MysqlDb<User>();
Db.add(u);
生活是痛苦的白天,死亡是凉爽的夜晚。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)