我有两个相同的功能,但是在不同的实体上工作,
async getUserName(userId: number): Promise<string> {
const user = await this.conn.getRepository(User).findOne(userId);
return user .name;
}
async getOrderName(orderId: number): Promise<string> {
const order = await this.conn.getRepository(Order).findOne(orderId);
return order .name;
}
如何在这两个函数的位置上创建一个通用函数,该函数仅接受实体和id
数字,并且像上述函数中的指南一样返回给定名称?
ps。我正在使用打字稿和打字稿
感谢您的帮助
答案 0 :(得分:1)
您很可能会将两个函数之间的差异作为所述函数的参数
type TRepository = User | Order
async getName(id: number, rep: TRepository): Promise<string> {
const entity = await this.conn.getRepository(rep).findOne(id);
return entity.name;
}
答案 1 :(得分:1)
您可以发送整个对象,而不是发送ID。基于此,您可以找到要搜索的存储库并从中获取ID。
此外,由于您使用的是await,因此您的函数将返回字符串而不是诺言。
async getOrderName(searchObj: User|Order): string {
const field = searchObj.instanceOf(User) ? User : Order
const value = await this.conn.getRepository(field).findOne(searchObj.id);
return value.name;
}
或者,您也可以尝试Object.constructor
async getOrderName(searchObj: User|Order): string {
const value = await this.conn
.getRepository(searchObj.constructor)
.findOne(searchObj.id);
return value.name;
}