泛型
function bar(arg: any): any { return arg}// 类型变量,它是一种特殊的变量,只用于表示类型而不是值。function test<T>(arg: T): T { return arg}let str = test<string>('testing') //传入所有的参数,包含类型参数let num = test(12) //返回值是数字类型
泛型变量
function fun<N>(arg: N): N { // arg.lenght 报错 return arg}function func<T>(arg: Array<T>): Array<T> { console.log(arg.length); return arg}
泛型类型
function func<T>(arg: T): T { return arg}let myFunc: <T>(arg: T) => T = funcinterface GenerFn<T> { (arg: T): T}let obj: GenerFn<number> = func
泛型约束
interface Lengthwise { length: number;}function loggingIdentity<T extends Lengthwise>(arg: T): T { console.log(arg.length); // Now we know it has a .length property, so no more error return arg;}// loggingIdentity(3); 报错number doesn't have a .length propertyloggingIdentity({ length: 10, val: 3 });class BeeKeeper { hasMask: boolean;}class ZooKeeper { nametag: string;}class Animal { numLegs: number;}class Bee extends Animal { keeper: BeeKeeper;}class Lion extends Animal { keeper: ZooKeeper;}function createInstance<A extends Animal>(c: new () => A): A { return new c();}createInstance(Lion).keeper.nametag; // typechecks!createInstance(Bee).keeper.hasMask; // typechecks!