泛型的一个常见用途是创建可重用的类、函数或接口,可以适用于不同的数据类型。下面我们将通过一个示例来演示如何在前端项目中使用泛型。
假设我们正在开发一个通用的数据管理类,它可以用于管理各种数据对象。我们可以定义一个泛型类 DataManager<T>,其中 T 表示数据对象的类型。
class DataManager<T> {
private data: T[];
constructor() {
this.data = [];
}
add(item: T): void {
this.data.push(item);
}
remove(item: T): void {
const index = this.data.indexOf(item);
if (index > -1) {
this.data.splice(index, 1);
}
}
getAll(): T[] {
return this.data;
}
}
在上述示例中,DataManager<T> 接受一个参数 T,作为泛型类型,用于标识数据的类型。我们使用 T[] 来声明一个数组变量 data,用于存储数据对象。
add 和 remove 方法接受一个参数 item,类型为 T,并将其添加或从数据中移除。getAll 方法返回一个 T[] 类型的数组,表示所有的数据对象。
现在,我们可以使用 DataManager<T> 来管理不同类型的数据对象。例如,我们可以创建一个 User 类型的 DataManager:
class User {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
const userManager = new DataManager<User>();
userManager.add(new User('John', 25));
userManager.add(new User('Jane', 30));
console.log(userManager.getAll());
在上述示例中,我们实例化了一个 DataManager<User> 并添加了两个 User 对象。调用 getAll 方法将返回一个 User[] 类型的数组。
使用泛型可以使代码更加通用和抽象。我们可以创建不同类型的 DataManager<T> 实例,来管理不同类型的数据。只需在实例化时传递相应的类型即可。