泛型:解决/类/接口/方法的复用性、以及对不特定数据类型的支持
泛型:软件工程中,我们不仅要创建一致的定义良好的api,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。
在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。
通俗理解:泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验)
泛型函数
T表示泛型,具体什么类型是调用这个方法的时候决定的
function getData<T>(value:T):T{
return value;
}
getData<number>(123);
getData<string>('1214231');
getData<number>('2112'); /*错误的写法*/
function getData<T>(value:T):any{
return '2145214214';
}
getData<number>(123); //参数必须是number
getData<string>('这是一个泛型');泛型类
class MaxClass<T> {
public list:T[] = [];
public add(value:T):void {
this.list.push(value);
}
public max():T {
var maxNum=this.list[0];
for(var i=0;i<this.list.length;i++){
if(maxNum<this.list[i]){
maxNum=this.list[i];
}
}
return maxNum;
}
}
var maxc = new MaxClass();
maxc.add(1);
maxc.add(13);
maxc.add(5);
console.log(maxc.max());
泛型接口
写法一:
interface ConfigFn{
<T>(value:T):T;
}
var getData:ConfigFn=function<T>(value:T):T{
return value;
}
// getData<string>('张三');
写法二:
interface ConfigFn<T>{
(value:T):T;
}
var myGetData:ConfigFn<string>= function getData<T>(value:T):T {
return value
}
myGetData('20'); /*正确*/把类作为参数
//定义操作数据库的泛型类
class MysqlDb<T>{
add(info:T):boolean{
console.log(info);
return true;
}
updated(info:T,id:number):boolean {
console.log(info);
console.log(id);
return true;
}
}
// 参数类
class User{
username:string | undefined;
pasword:string | undefined;
}
var u=new User();
u.username='张三';
u.pasword='123456';
var Db=new MysqlDb<User>();
Db.add(u);本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!