Вывод вложенного общего параметра и возврат его из функции - PullRequest
1 голос
/ 15 июня 2019

У меня есть 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 голосов
/ 15 июня 2019

Я думаю, вы должны также передать тип при вызове функции.

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

Теперь, если вы не хотите, чтобы тип передавался каждый раз, когда вы вызываете функцию и хотите, чтобы она выводила AccountClass, просто назначьте тип по умолчанию AccountClass для универсального типа.

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