Интерфейсы не существуют во время выполнения.
Интерфейсы TypeScript гарантируют только структурную совместимость . Экземпляр класса, который должен соответствовать типу (например, err: MyException
), не обязательно должен быть экземпляром класса с тем же именем (прототипно наследовать от него).
Для того чтобы интерфейс использовался во время выполнения, он должен быть классом. Если класс по какой-то причине не предполагается создавать экземпляром, он должен быть абстрактным, и конкретный класс должен наследовать от него:
abstract class BaseMyException {
...
}
class MyException extends BaseMyException {}
Тогда можно утверждать, что он является экземпляром этого класса с err instanceof BaseMyException
. Обратите внимание, что err.constructor
проверяет только собственный конструктор.