探讨TypeScript中的泛型的使用方法和场景|青训营

62 阅读1分钟

泛型的一个常见用途是创建可重用的类、函数或接口,可以适用于不同的数据类型。下面我们将通过一个示例来演示如何在前端项目中使用泛型

假设我们正在开发一个通用的数据管理类,它可以用于管理各种数据对象。我们可以定义一个泛型类 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> 实例,来管理不同类型的数据。只需在实例化时传递相应的类型即可。