推断嵌套的通用参数并从函数中返回

时间:2019-06-15 15:24:45

标签: javascript typescript generics interface nested

我有这样的IModelDefinition

export interface IModelDefinition<MT extends Typegoose, QT> {
  model: new () => MT;
}

QT并不是直接在界面本身中使用的,而是作为辅助函数传递给其他函数的,因此Typescript可以自动推断QT:

public async getSingleMatch<MT extends Typegoose, QT>(
    definition: ModelDefinition<MT, QT>,
    doc: QT
): Promise<MT> ...

我这样调用函数:

// Account is a ModelDefinition<AccountClass, {identifier: string} and
// if I remove the identifier string, it gives an error as I expect it to.
const account = await getSingleMatch(Account, {
      identifier: params.identifier,
});

一切正常,直到得到结果。结果为Typegoose类型,但应为AccountClass类型。 我该如何解决?感谢您的帮助。

编辑:解决误解;我可以传递类型,但是构建此文件的全部原因是不传递类型并使其自动推断。没有办法吗?

1 个答案:

答案 0 :(得分:0)

我认为您在调用函数时也应该传递类型。

const account = await getSingleMatch<AccountClass, {identifier: string}>(Account, {identifier: params.identifier})

现在,如果您不希望每次调用该函数时都要传递类型并希望其推断AccountClass,那么只需将默认类型AccountClass分配给泛型类型。 / p>

public async getSingleMatch<MT extends Typegoose = AccountClass, QT>(
    definition: ModelDefinition<MT, QT>,
    doc: QT
): Promise<MT> ...