在TypeScript中,泛型(generics)是一种在定义函数、类或接口时使用的类型占位符。泛型可以增强代码的重用性、类型安全性和可读性。
1.在函数中使用泛型:
function reverse<T>(arr: T[]): T[] {
return arr.reverse();
}
let numbers = [1, 2, 3, 4, 5];
let reversedNumbers = reverse(numbers); // 返回 [5, 4, 3, 2, 1]
let strings = ["hello", "world"];
let reversedStrings = reverse(strings); // 返回 ["world", "hello"]
上面的例子中,<T>
表示泛型类型,可以在函数参数和函数返回值中使用。通过使用泛型,函数可以接受不同类型的数组作为参数,并返回相同类型的数组。
2.在类中使用泛型:
class Box<T> {
private value: T;
constructor(value: T) {
this.value = value;
}
getValue(): T {
return this.value;
}
}
let numberBox = new Box<number>(42);
let stringValue = numberBox.getValue().toString(); // 返回 "42"
let stringBox = new Box<string>("hello");
let stringLength = stringBox.getValue().length; // 返回 5
在上面的例子中,Box<T>
类中的T
表示泛型类型。通过使用泛型,可以在实例化类时指定具体的类型,并在类的方法中使用泛型类型。
3.在接口中使用泛型:
interface KeyValuePair<K, V> {
key: K;
value: V;
}
let pair1: KeyValuePair<number, string> = { key: 1, value: "one" };
let pair2: KeyValuePair<string, number> = { key: "two", value: 2 };
在上面的例子中,KeyValuePair<K, V>
接口中的K
和V
表示泛型类型。在实例化KeyValuePair
时,可以指定具体的类型。
总结:
TypeScript中的泛型可以在函数、类和接口中使用,它提供了一种更通用的类型定义方式。通过使用泛型,可以增加代码的灵活性和可重用性,同时保持类型的安全性。