/**
*
* 泛型的基本表示方法
*/
function fn<T>(prop:T):T{
return prop;
}
//调用
let output=fn<string>('string');
//同样可以利用类型推论来判断类型
let output2=fn('string');
//返回类型为T的数组
function array<T>(prop:T[]) : T[]{
console.log(prop.length);
return prop;
}
/**
* 泛型类型
* ???泛型接口
*/
let f: <U>(args:U) => U = fn
//使用对象字面量调用
let o:{<U>(args:U):U} = fn
/**
* 泛型类
*/
class GenericNumber<T>{
zeroValue:T;
add:(x:T,Y:T) => T;
}
let myGenericNumber=new GenericNumber<number>();
myGenericNumber.zeroValue=0;
myGenericNumber.add=function(x:number,y:number){
return x+y;
}
/**
* 泛型约束
*/
interface lengthWise{
length:number;
}
function loggingIdentity<T extends lengthWise>(args:T):T{
return args;
}
/**
* 泛型中使用类类型
* ???
*/
function create<T>(c:{new():T}):T{
return new c();
}