TypeScript 基础指南:泛型(Generics)

在 TypeScript 中,泛型(Generics)是一种强大的功能,它允许开发者创建可以处理多种数据类型的可重用组件。 泛型的基本语法如下:

function functionName<T>(parameter: T): T {
  // 函数体
  return parameter;
}

// 使用泛型函数
let result = functionName<string>('hello');
在这个例子中:
1.
<T> 是一个类型参数,它表示一种未知的数据类型。
2.
在函数体内,我们可以使用 T 类型来定义参数和返回值的类型。
3.
当调用这个函数时,我们可以指定 T 的具体类型,如 <string>。
下面是一个更具体的例子:
function identity<T>(arg: T): T {
  return arg;
}

let output1 = identity<string>('hello');  // output1 is of type string
let output2 = identity<number>(42);      // output2 is of type number

在这个例子中,identity 函数接受一个类型参数 T,并返回相同类型的值。当我们调用 identity 函数时,我们可以指定 T 的具体类型,这样就可以确保函数的输入和输出都是同一种类型。

泛型不仅可以用于函数,还可以用于类和接口:
class GenericBox<T> {
  private value: T;

  set(val: T): void {
    this.value = val;
  }

  get(): T {
    return this.value;
  }
}

let stringBox = new GenericBox<string>();
stringBox.set('hello');
let message: string = stringBox.get();

在这个例子中,我们定义了一个 GenericBox 类,它使用类型参数 T 来描述它所包含的值的类型。当创建 GenericBox 的实例时,我们可以指定 T 为 string,从而确保该实例只能存储和返回字符串类型的值。

泛型的主要优点包括:
代码复用
泛型允许我们编写一次代码,就可以处理多种数据类型,从而提高代码的可重用性。
类型安全
泛型可以在编译时检查类型,避免运行时出现类型错误。
灵活性
泛型可以根据具体的使用场景动态地确定类型,增加了代码的灵活性。

总之,泛型是 TypeScript 中一个非常强大的特性,它可以帮助开发者编写出更加通用、类型安全和可维护的代码。合理使用泛型可以大大提高开发效率,并增强代码的可靠性。