/** * * 泛型的基本表示方法 */ 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(); }