乐闻世界logo
搜索文章和话题

How to create generic function in TS and TypeORM?

1 个月前提问
1 个月前修改
浏览次数21

1个答案

1

在TypeScript (TS) 和 TypeORM 中创建泛型函数允许代码在保持强类型的同时更具可重用性。下面,我将介绍一个例子来展示如何在TypeORM中使用TS创建泛型函数来处理数据库实体的通用操作。

示例:创建一个通用的CRUD操作函数

  1. 定义一个泛型接口

    首先,我们需要定义一个泛型接口,它将定义所有实体必须实现的方法。这就为我们提供了一个通用的方式来处理不同的实体。

    typescript
    interface IGenericCRUD<T> { create(item: T): Promise<T>; read(id: number): Promise<T | null>; update(id: number, item: T): Promise<T>; delete(id: number): Promise<void>; }
  2. 实现泛型类

    接下来,我们定义一个泛型类,该类实现了IGenericCRUD接口。这个类将利用TypeORM的Repository来实现CRUD操作。

    typescript
    import { Repository, EntityTarget, getRepository } from 'typeorm'; class GenericCRUD<T> implements IGenericCRUD<T> { private entity: EntityTarget<T>; private repo: Repository<T>; constructor(entity: EntityTarget<T>) { this.entity = entity; this.repo = getRepository(this.entity); } async create(item: T): Promise<T> { return this.repo.save(item); } async read(id: number): Promise<T | null> { return this.repo.findOne(id); } async update(id: number, item: T): Promise<T> { await this.repo.update(id, item); return this.read(id); } async delete(id: number): Promise<void> { await this.repo.delete(id); } }
  3. 使用泛型类

    现在我们可以创建特定类型的CRUD实例。例如,如果我们有一个User实体,我们可以这样使用:

    typescript
    import { User } from './entities/User'; const userCRUD = new GenericCRUD<User>(User); async function demoUserCRUD() { // 创建用户 const newUser = await userCRUD.create({ firstName: "Xiao", lastName: "Ming" }); // 读取用户 const user = await userCRUD.read(newUser.id); // 更新用户信息 const updatedUser = await userCRUD.update(user.id, { ...user, lastName: "Li" }); // 删除用户 await userCRUD.delete(updatedUser.id); }

总结

通过使用泛型,我们可以创建一个强类型且可重用的CRUD类,它可以与任何TypeORM实体一起使用。这不仅减少了代码重复,也提高了代码的可维护性和类型安全。

2024年8月3日 16:58 回复

你的答案