亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 TS 和 TypeORM 中創建泛型函數?

如何在 TS 和 TypeORM 中創建泛型函數?

四季花海 2023-03-24 16:46:08
如何在 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}`;    }還有一個……另一個……另一個……所以,我需要創建一個通用函數來與許多實體一起使用有人可以告訴我如何創建該功能嗎?
查看完整描述

3 回答

?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

您應該能夠利用鴨子類型來概括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.


查看完整回答
反對 回復 2023-03-24
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

我強烈建議查看 https://www.typescriptlang.org/docs/handbook/generics.html

如果愿意,您可以傳入類型 T(并返回類型 T)。

async getServiceName<T>(id: T): Promise<string> {

            const service = await this.conn.getRepository(Service).findOne(id);

            return `${service.name}`;

        }

顯然,您必須重載 findOne 函數才能獲取任意數量的類型 T?;蛘吣憧梢猿墤卸?,在最低級別使用任何關鍵字。


查看完整回答
反對 回復 2023-03-24
?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

您可以使用

const a = MyRepositoryName

a作為參數傳遞給函數


查看完整回答
反對 回復 2023-03-24
  • 3 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號