Как привести переменную к определенному типу, чтобы убедить, что машинопись в любом месте? - PullRequest
0 голосов
/ 31 января 2020

По IE причинам мне нужно создать пользовательскую ошибку, однако, как можно лучше, ошибку необходимо проверить с помощью конструктора.

customError instanceof CustomError; // false
customError.constructor === CustomError; // true

Теперь, как я могу убедить машинопись, если в операторе if?

if (customError.constructor === CustomError) {
  customError.customMethod1() // typescript complaints
  customError.customMethod2() // typescript complaints
  customError.customMethod3() // typescript complaints
  customError.customMethod4() // typescript complaints
}

РЕДАКТИРОВАНИЕ:

Фон - это когда вы компилируете до ES5, некоторые наследования не могут быть совместимы.

Есть ли способ Я могу разыграть его один раз, и мне не нужно использовать as каждый раз, когда я использую переменную?

Пока что единственный способ работать с ней:

const myCustomError = (customError as CustomError)

Открыт для других ярких идей .

1 Ответ

2 голосов
/ 31 января 2020

Напишите Определяемый пользователем тип Guard :

function isCustomError(x: any): x is CustomError {
    return x.constructor === CustomError;
}

И используйте его:

if (isCustomError(err)) {
    err.customMethod1();
}

См. детская площадка .

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