Проверка типа интерфейса с помощью Typescript

Этот вопрос является прямым аналогомПроверка типа класса с помощью TypeScript

Мне нужно выяснить во время выполнения, если переменная типа any реализует интерфейс. Вот мой код:

interface A{
    member:string;
}

var a:any={member:"foobar"};

if(a instanceof A) alert(a.member);

Если вы введете этот код на игровой площадке, последняя строка будет помечена как ошибка: «Имя A не существует в текущей области». Но это не так, имя существует в текущей области. Я даже могу изменить объявление переменной наvar a:A={member:"foobar"}; без нареканий от редактора. После просмотра веб-страниц и нахождения другого вопроса в SO я изменил интерфейс на класс, но затем я не могу использовать объектные литералы для создания экземпляров.

Я задавался вопросом, как тип A мог исчезнуть таким образом, но взгляд на сгенерированный javascript объясняет проблему:

var a = {
    member: "foobar"
};
if(a instanceof A) {
    alert(a.member);
}

Нет представления A как интерфейса, поэтому проверки типа во время выполнения невозможны.

Я понимаю, что javascript как динамический язык не имеет понятия интерфейсов. Есть ли способ проверки типа для интерфейсов?

Автозаполнение игровой площадки показывает, что машинопись даже предлагает методimplements, Как я могу использовать это?

Ответы на вопрос(9)

Ваш ответ на вопрос