Интерфейс для неинстанцированных классов - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть такая структура кода:

interface ITool {
  repair(): void;
}

type HandlersMap = Map<string, ITool>;

abstract class AbstractTool {

  constructor(protected qpr, protected ctx) { }

  abstract async repair(): Promise<void>
}

class DebugTool extends AbstractTool implements ITool {
  async repair(): Promise<void> {
    this.logger.info(`Repaired item: ${this.qpr.type}`);
  }
}

class ToolFactory {
  private handlersMap: HandlersMap = new Map([
    ['debug-message', DebugTool]
  ]);

  createTool(type: string): ITool {
    ...
  }
}

, что приводит к ошибке:

handlersMap: свойство 'repair' отсутствует в типе 'typeof DebugTool', но требуется в введите 'ITool'.

Я знаю, что это потому, что я не создал экземпляр класса в качестве значения Map, но все еще реализую интерфейс, на который я ссылаюсь. В чем проблема и какой интерфейс следует использовать для значения Карты?

1 Ответ

1 голос
/ 21 апреля 2020

Что-то вроде:

type HandlersMap = Map<string, { new(...args): ITool }>;

Если вы знаете больше об аргументах конструктора, вы можете указать c (например, если все инструменты имеют аргументы qpr и ctx Вы можете использовать это вместо variadi c ...args).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...