大家好,这里是
皮哥饭店,帮助大家下饭。
今天分享一些泛型相关的简单知识 。
泛型是指在定义函数、接口或类时,不预先指定具体的类型,而是在使用时再指定类型的一种特殊语法。通过使用泛型,可以增强代码的可重用性和灵活性,提高代码的类型安全性。
下面给出几个泛型的使用示例:
- 泛型函数
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("hello");
console.log(output); // 输出 "hello"
output = identity<number>(10);
console.log(output); // 输出 10
在这个示例中,identity 函数使用了泛型 T,表示它可以接收任意类型的参数。在函数调用时,需要指定 T 的具体类型,可以通过传入一个字符串或一个数字来指定类型。
- 泛型接口
interface Pair<T, U> {
first: T;
second: U;
}
let pair: Pair<string, number> = { first: "hello", second: 123 };
console.log(pair); // 输出 { first: 'hello', second: 123 }
在这个示例中,Pair 接口定义了两个泛型类型参数 T 和 U,表示一个具有两个属性 first 和 second 的对象,分别对应这两个泛型类型参数的类型。在实例化时,需要指定具体的类型,例如 { first: "hello", second: 123 } 对象的类型为 Pair<string, number>。
- 泛型类
class Stack<T> {
private items: T[] = [];
push(item: T) {
this.items.push(item);
}
pop(): T | undefined {
return this.items.pop();
}
}
let stack = new Stack<number>();
stack.push(1);
stack.push(2);
stack.push(3);
console.log(stack.pop()); // 输出 3
console.log(stack.pop()); // 输出 2
console.log(stack.pop()); // 输出 1
在这个示例中,Stack 类使用泛型 T,表示它可以存储任意类型的元素。在实例化时,需要指定具体的类型,例如 let stack = new Stack<number>() 表示实例化一个存储数字类型的栈对象。在 push 方法中可以存储任意类型的元素,而在 pop 方法中则可以获取存储的元素并返回其对应的类型。