泛型:不预先确定的数据类型,具体的类型在使用的时候才能确定。

为什么要使用泛型

  1. function log(value: string) {
  2. console.log(value);
  3. return value;
  4. };

假定如上log函数,还要支持字符串数组,应该如何实现,下面是两种做法

  1. function log(value: string): string;
  2. function log(value: string[]): string[];
  3. function log(value: any): any {
  4. console.log(value);
  5. return value
  6. }
  1. function log(value: string | string[]): string | string[] {
  2. console.log(value);
  3. return value;
  4. };
  1. function log(value: any): any {
  2. console.log(value);
  3. return value;
  4. };

使用泛型不会丢失具体类型,同时更具备扩展性。使用泛型可以指定类型,也可以交给类型推断:

  1. function log<T>(value: T): T {
  2. console.log(value);
  3. return value;
  4. };
  5. log<string[]>(['abc']);
  6. log(['abc']);
  7. log<string[]>(['abc', 123]); // Type 'number' is not assignable to type 'string'.

type和interface定义泛型

  1. type Log = <T>(value: T) => T;
  2. const myLog: Log = log;