Как выразить тип подкласса ошибки - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь сделать набор текста для пакета trace-error. По сути, это позволяет создавать связанные ошибки, как показано ниже:

const downStreamError = new TraceError("Some message", upStreamError)

Вот для чего я и придумал:

declare module "trace-error" {
  class TraceError implements Error {
    name: string;
    message: string;
    constructor(message: string, ...errors: Error[]);
  }

  export default TraceError;
}

Но я получаю эту ошибку:

Type 'TraceError' has no properties in common with type 'Error'.

Я понимаю, что это потому, что constructor отсутствует в интерфейсе Ошибка.

Я также пытался использовать объявление функции:

declare module "trace-error" {
  function TraceError(message: string, ...errors: Error[]): Error;

  export default TraceError;
}

Но тогда я получаю сообщение об ошибке ниже в коде клиента (по понятным мне причинам):

[ts] Only a void function can be called with the 'new' keyword.

Так что я застрял в том, как написать набор для варианта использования, описанного в начале моего вопроса. Любое понимание будет очень ценится.

Редактировать: Быстрое исправление

Ниже приведено быстрое исправление, которое я использую сейчас:

declare module "trace-error" {
  class TraceError {
    constructor(message: string, ...errors: Error[]);
  }

  export default TraceError;
}

Компилятор больше не жалуется, но любая ссылка на класс Error удалена.

...