函数泛型:
//函数泛型
function fun<T>(value:T):T{
return value;
}
console.log(fun<string>('测试函数泛型'));
console.log(fun<number>(123));
// 类泛型
class minClass<T>{
public arr:T[]=[];
constructor(arr:T[]){
this.arr=arr;
}
min():T{
let arr = this.arr;
let min = arr[0];
for(var i=0;i<arr.length;i++){
if(min>arr[i]){
min=arr[i];
}
}
return min;
}
}
let m = new minClass<number>([9,4,2,6]);
console.log(m.min());
let m1 = new minClass<string>(['a','b',"c",'d','e','f']);
console.log(m1.min());
interface config{
<T>(str:T):T
}
let fun1:config=function<T>(str:T):T{
return str;
}
console.log(fun1('测试泛型接口'));
interface config1<T>{
(str:T):T
}
function fun2<T>(str:T):T{
return str;
}
let funs:config1<string>=fun2;
console.log(funs('测试第二种方法'));
class User{
username:string|undefined;
password:string|undefined;
}
let u = new User();
u.username='张三';
u.password='123456';
class mysqlDb{
add(user:User):boolean{
console.log(user,'user');
return true;
}
}
var Db = new mysqlDb();
Db.add(u);
// Db.add({username:'111'}); //报错 必须使用固定好的数据传递
class MysqlDb<T>{
add(info:T):boolean{
console.log(info,'info');
return true;
}
}
let Dbs = new MysqlDb<User>();
Dbs.add(u);
class Article{
title:string;
desc:string;
status:number;
constructor(o:{title:string,desc:string,status:number}){
this.title=o.title;
this.desc=o.desc;
this.status=o.status;
}
}
let a = new Article({title:'文章',desc:'描述',status:1});
let Dbs1 = new MysqlDb<Article>();
Dbs1.add(a);