首页 > 解决方案 > TypeScript 重载:以枚举参数为条件的返回类型

问题描述

我正在尝试根据函数的枚举参数指定返回类型。

这有效:

GetDoc(dbType: dbTypes.Responses, id: string): Promise<PouchResponse>;
GetDoc(dbType: dbTypes.Questionnaires, id: string): Promise<PouchQuestionnaire>;
GetDoc(dbType: dbTypes, id: string): Promise<PouchQuestionnaire | PouchResponse> {
    if (dbType === dbTypes.Responses)
        return new PouchDB<PouchResponse>("responses").get(id);
    if (dbType === dbTypes.Questionnaires)
        return new PouchDB<PouchQuestionnaire>("questionnaires").get(id);
    throw "Invalid dbType";
}

但现在我想把它移到new db它自己的函数中,所以我这样做:

GetDB(dbType: dbTypes.Responses): PouchDB.Database<PouchResponse>;
GetDB(dbType: dbTypes.Questionnaires): PouchDB.Database<PouchQuestionnaire>;
GetDB(dbType: dbTypes): PouchDB.Database<PouchQuestionnaire | PouchResponse> {
    if (dbType === dbTypes.Responses)
        return new PouchDB<PouchResponse>("responses");
    if (dbType === dbTypes.Questionnaires)
        return new PouchDB<PouchQuestionnaire>("questionnaires");
    throw "Invalid dbType";
}

GetDoc2(dbType: dbTypes.Responses, id: string): Promise<PouchResponse>;
GetDoc2(dbType: dbTypes.Questionnaires, id: string): Promise<PouchQuestionnaire>;
GetDoc2(dbType: dbTypes, id: string): Promise<PouchQuestionnaire | PouchResponse> {
    return this.getDB(dbType).get(id); // <<-- error here: dbTypes is not assignable to dbTypes.Responses
}

我该如何解决?

标签: typescript

解决方案


推荐阅读