什么是 TypeScript 中的泛型及其应用场景?
探讨了 TypeScript 泛型的基本概念、作用及其在集合类和自定义类中的具体应用。
泛型是一种编程机制,允许类、接口和方法使用类型参数(称为泛型类型)代替具体类型,从而创建可重用的组件以处理不同数据类型。通过泛型,代码在编译时增强类型安全性、避免运行时转换错误并提升可重用性。以下从作用和常见使用场景展开。
泛型的作用
- 增强类型安全性:泛型在编译时进行类型检查,避免运行时类型错误。例如,使用
List<string>
确保只能添加字符串类型元素,防止意外添加整数等错误类型。 - 提高代码重用性:泛型允许写通用代码,不需要针对每种类型创建专属逻辑。如通过
printArray<T>(arr: T[])
可处理任何类型数组。 - 减小运行开销:泛型替换手工强制类型转换,消除运行时
unboxing/boxing
开销。 - 增强代码清晰度:明确数据类型意图,让设计文档和API更易理解。
泛型的使用场景
- 集合类:实现类型安全数据结构,如 TypeScript 中的
Array<T>
,Map<K, V>
。const numbers: Array<number> = [1, 2, 3]; const map: Map<string, number> = new Map([["age", 25]]);
- 自定义类和接口:创建适应不同数据类型的通用类或接口。
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
- 泛型方法:函数独立于特定类型。常用作通用工具函数。
function reverse<T>(arr: T[]): T[] { return arr.reverse(); } reverse<number>([1, 2, 3]); // [3, 2, 1] reverse<string>(["a", "b"]); // ["b", "a"]
- 其他通用组件:如事件处理、错误处理库或基础抽象组件。