什么是 TypeScript 中的泛型及其应用场景?

探讨了 TypeScript 泛型的基本概念、作用及其在集合类和自定义类中的具体应用。

TypeScript 中等 泛型 Generics

泛型是一种编程机制,允许类、接口和方法使用类型参数(称为泛型类型)代替具体类型,从而创建可重用的组件以处理不同数据类型。通过泛型,代码在编译时增强类型安全性、避免运行时转换错误并提升可重用性。以下从作用和常见使用场景展开。

泛型的作用

  1. 增强类型安全性:泛型在编译时进行类型检查,避免运行时类型错误。例如,使用 List<string> 确保只能添加字符串类型元素,防止意外添加整数等错误类型。
  2. 提高代码重用性:泛型允许写通用代码,不需要针对每种类型创建专属逻辑。如通过 printArray<T>(arr: T[]) 可处理任何类型数组。
  3. 减小运行开销:泛型替换手工强制类型转换,消除运行时 unboxing/boxing 开销。
  4. 增强代码清晰度:明确数据类型意图,让设计文档和API更易理解。

泛型的使用场景

  1. 集合类:实现类型安全数据结构,如 TypeScript 中的 Array<T>, Map<K, V>
    const numbers: Array<number> = [1, 2, 3];
    const map: Map<string, number> = new Map([["age", 25]]);
    
  2. 自定义类和接口:创建适应不同数据类型的通用类或接口。
    class Pair<T> {
      constructor(public first: T, public second: T) {}
      display(): void { console.log(`Pair: ${this.first}, ${this.second}`); }
    }
    const pair = new Pair<string>("Hello", "TypeScript");
    pair.display(); // 输出: Pair: Hello, TypeScript
    
  3. 泛型方法:函数独立于特定类型。常用作通用工具函数。
    function reverse<T>(arr: T[]): T[] { return arr.reverse(); }
    reverse<number>([1, 2, 3]); // [3, 2, 1]
    reverse<string>(["a", "b"]); // ["b", "a"]
    
  4. 其他通用组件:如事件处理、错误处理库或基础抽象组件。