TypeScript 泛型(generics)可以让我们在编写代码时指定类型参数,从而增加代码的灵活性和重用性。下面是一些正确使用 TypeScript 泛型的示例:
1.定义泛型函数:
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("hello");
console.log(output); // 输出: "hello"
在上面的示例中,我们定义了一个泛型函数 identity
,它接受一个类型参数 T
,并返回一个 T
类型的值。我们在调用函数时明确指定了类型参数为 string
,然后将参数 "hello"
传递给函数,返回的结果就是 "hello"
。
2.定义泛型类:
class Stack<T> {
private elements: T[] = [];
push(element: T): void {
this.elements.push(element);
}
pop(): T | undefined {
return this.elements.pop();
}
}
let stack = new Stack<number>();
stack.push(1);
stack.push(2);
console.log(stack.pop()); // 输出: 2
在上面的示例中,我们定义了一个泛型类 Stack
,它接受一个类型参数 T
。类中的 elements
属性是一个 T
类型的数组,push
方法接受一个 T
类型的参数,并将它添加到数组中,pop
方法返回数组中的最后一个元素并将其从数组中删除。在创建 Stack
实例时,我们指定了类型参数为 number
,然后可以使用该实例的方法来操作 number
类型的元素。
3.使用泛型约束:
interface Lengthable {
length: number;
}
function getLength<T extends Lengthable>(obj: T): number {
return obj.length;
}
console.log(getLength("hello")); // 输出: 5
console.log(getLength([1, 2, 3])); // 输出: 3
在上面的示例中,我们定义了一个接口 Lengthable
,它包含一个 length
属性。然后我们定义了一个泛型函数 getLength
,该函数接受一个类型参数 T
,约束了 T
必须实现 Lengthable
接口。函数内部通过访问 obj.length
属性来获取对象的长度。在调用函数时,我们可以传递字符串和数组等具有 length
属性的对象。
这些是 TypeScript 泛型的一些基本使用方法,通过合理地使用泛型,我们可以编写出更灵活和可复用的代码。