泛型是 TypeScript 中一个非常强大且重要的概念,它允许你编写更加灵活、可重用的代码,特别是在函数、类和接口中。让我们详细了解泛型的概念和用法。
1. 泛型的概念和用途:
泛型允许你在编写代码时不指定具体的类型,而是在使用的时候再指定。这使得你可以编写更通用的函数、类和接口,能够处理多种类型的数据,而不必针对每种类型都写重复的代码。
2. 在函数中使用泛型:
使用泛型,你可以编写能够适应不同类型数据的函数。以下是一个示例:
function identity<T>(value: T): T {
return value;
}
const result1 = identity(5); // 类型推断为 number
const result2 = identity("hello"); // 类型推断为 string
在这个示例中,我们定义了一个名为 identity
的泛型函数,它可以接受任意类型的参数并返回相同类型的值。通过使用 <T>
语法,我们声明了一个泛型类型参数 T
,它表示类型变量。
3. 在类中使用泛型:
泛型也可以在类中使用,用于处理类的属性和方法的类型。
class Box<T> {
value: T;
constructor(value: T) {
this.value = value;
}
getValue(): T {
return this.value;
}
}
const numberBox = new Box(42); // 类型推断为 number
const stringBox = new Box("hello"); // 类型推断为 string
在这个例子中,我们创建了一个名为 Box
的泛型类,它可以存储和返回任意类型的值。
4. 在接口中使用泛型:
泛型也可以在接口中使用,使得接口可以适应多种类型的数据结构。
interface Pair<T, U> {
first: T;
second: U;
}
const pair1: Pair<number, string> = { first: 1, second: "two" };
const pair2: Pair<string, boolean> = { first: "yes", second: true };
在这个示例中,我们定义了一个名为 Pair
的泛型接口,它可以表示包含两种不同类型值的数据结构。
通过使用泛型,你可以增加代码的灵活性和可重用性,使你的代码能够更好地处理不同类型的数据,而不必写重复的代码。泛型是 TypeScript 中一个强大的工具,它可以帮助你编写更通用和可扩展的代码。