首页 > 解决方案 > 如何在 TS 和 TypeORM 中创建泛型函数?

问题描述

如何在 TS 和 TypeORM 中创建泛型函数?

我有这样的多个功能:

    async getOrderName(id: number): Promise<string> {
        const order = await this.conn.getRepository(Order).findOne(id);
        return `${order.name}`;
    }
    async getServiceName(id: number): Promise<string> {
        const service = await this.conn.getRepository(Service).findOne(id);
        return `${service.name}`;
    }

还有一个……另一个……另一个……

所以,我需要创建一个通用函数来与许多实体一起使用

有人可以告诉我如何创建该功能吗?

标签: javascripttypescripttypeorm

解决方案


您应该能够利用鸭子类型来概括EntityTargets 上的功能:

interface NamedThing {
    name: string
}
async getName<Entity extends NamedThing>(id: number, target: EntityTarget<Entity>): Promise<string> {
    const named = await this.conn.getRepository<Entity>(target).findOne(id);
    return `${named && named.name}`;
}

// equivalent calls are now `getName(id, Order)`, `getName(id, Service)`, etc.

推荐阅读