定义

泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。

泛型就是用一个东西表示广泛的类型。

function returnIt<T>(arg: T): T {
  return arg;
}

let s = returnIt<string>("hi");

泛型约束

就是给泛型添加一些约束。

添加约束之前,这是错的:

function returnIt<T>(arg: T): T {
  console.log(arg.length); // error
  return arg;
}

添加约束之后:

interface HasLength {
  length: number;
}

function returnIt<T extends HasLength>(arg: T): T {
  console.log(arg.length); // no error
  return arg;
}

returnIt(['12',34])
returnIt([12,34])
returnIt(['12','34'])

returnIt<any[]>(['12',34])
returnIt<number[]>([12,34])
returnIt<string[]>(['12','34'])

returnIt<Array<any>>(['12',34])
returnIt<Array<number>>([12,34])
returnIt<Array<string>>(['12','34'])

定义数组时使用泛型

通常这样定义数组:

let arr: number[] = [1,2,3];

可以使用泛型的方式去定义:

let arr: Array<number> = [1,2,3];