泛型
泛型是一种强大的特性,它允许开发者定义可以接收不同类型参数的函数、类和接口,从而提高代码的复用性和灵活性。
1. 泛型函数
泛型函数允许在函数声明时定义一个或多个类型参数,从而可以在函数体内使用这些参数作为类型。
示例:
function identity<T>(arg: T): T {
return arg;
}
const str = identity<string>("Hello"); // 指定类型为 string
const num = identity<number>(123); // 指定类型为 number
console.log(str); // 输出:Hello
console.log(num); // 输出:123
2. 泛型类
泛型类允许类在声明时使用类型参数,从而可以为类的属性和方法定义灵活的类型。
示例:
class GenericBox<T> {
private value: T;
constructor(value: T) {
this.value = value;
}
getValue(): T {
return this.value;
}
}
const stringBox = new GenericBox<string>("Hello");
const numberBox = new GenericBox<number>(42);
console.log(stringBox.getValue()); // 输出:Hello
console.log(numberBox.getValue()); // 输出:42
3. 泛型接口
泛型接口允许定义带有类型参数的接口,可以用于描述具有特定属性和方法的对象。
示例:
interface Pair<K, V> {
key: K;
value: V;
}
const pair1: Pair<number, string> = { key: 1, value: "One" };
const pair2: Pair<string, boolean> = { key: "isActive", value: true };
console.log(pair1); // 输出:{ key: 1, value: 'One' }
console.log(pair2); // 输出:{ key: 'isActive', value: true }
总结
通过泛型函数、泛型类和泛型接口,TypeScript 允许开发者编写更加灵活和可复用的代码。泛型的使用能够显著提高类型安全性和代码的可读性,使得函数和类能够处理不同类型的数据而不丧失类型信息。