Какой тип возврата у этой фабричной функции для абстрактного класса? - PullRequest
0 голосов
/ 27 марта 2020

Я разрабатываю GraphQL API с TypeGraphQL, и я почувствовал необходимость реализовать этот шаблон , чтобы исключить немного шаблонного кода в моей базе кода. Основываясь на этом примере, в итоге получается что-то вроде этого (пропущены нерелевантные биты):

export default function PaginatedResponse<TItem>(TItemClass: ClassType<TItem>) {

  @ObjectType({ isAbstract: true })
  abstract class PaginatedResponseClass {

    // here we use the runtime argument
    @Field(type => [TItemClass])

    // and here the generic type
    items: TItem[];

  }

  return PaginatedResponseClass;

}

И просто вам не нужно его искать, ClassType - это экспортированный интерфейс TypeGraphQL, подобный этому:

export interface ClassType<T = any> {
    new (...args: any[]): T;
}

Я не могу найти способ ссылаться на PaginaedResponseClass как тип возвращаемого значения функции, потому что он объявлен после объявления функции, и я не могу переместить этот класс за пределы функции потому что это зависит от TItemClass, который исходит от параметра функции.

Мой вопрос: Что за явный тип возврата PaginatedResponse? Можно ли даже объявить это?

...