基础
function cyc<T>(msg:T):string{
let str:string="你输入了:";
str+=msg;
return str;
}
var log=cyc<string>("1");
console.log(log)
var log1=cyc<number>(2);
console.log(log1)
泛型约束<T extends cyc>
interface cyc{
id:number,
name:string
}
function box<T extends cyc>(arr:T[]):T[]{
arr.map(x=>{
x.name+="1";
})
return arr;
}
var arr:cyc[]=[
{
id:1,
name:"wx搜程序员实用资源"
},
{
id:2,
name:"wx搜程序员野区"
}
]
var newArr=box(arr);
console.log(newArr)
泛型类型
function cyc<T>(x:T):T{
return x;
}
var b:{<T>(x:T):T}=cyc;
console.log(b("写法一"));
var c:<U>(x:U)=>U=cyc;
console.log(c("写法二"));
泛型接口
function cyc<T>(x:T):T{
return x;
}
interface box{
<T>(x:T):T
}
var b:box=cyc;
console.log(b("wx搜程序员野区"));
写法二
function cyc<T>(x:T):T{
return x;
}
interface box<T>{
(x:T):T
}
var b:box<string>=cyc;
console.log(b("wx搜程序员野区"));
泛型类
class box<T>{
a:T;
add:(x:T,y:T)=>T
}
let cyc=new box<number>();
cyc.a=10;
cyc.add=(x,y)=>{return x*y};
console.log(cyc.add(cyc.a,60));
object、泛型、object的key类型声明
function getProperty<T,K extends keyof T>(obj: T, key:K) {
return obj[key];
}
let x:{
[propName:string]:number
} = { a: 1, b: 2, c: 3, d: 4 };
console.log(getProperty(x, "a"));