Этот вопрос является прямым аналогом Проверка типа класса с помощью TypeScript
Мне нужно узнать во время выполнения, если переменная типа any реализует интерфейс. Здесь мой код:
interface A{
member:string;
}
var a:any={member:"foobar"};
if(a instanceof A) alert(a.member);
Если вы введете этот код на игровой площадке typescript, последняя строка будет отмечена как ошибка, "Имя A не существует в текущей области". Но это не так, это имя существует в текущей области. Я даже могу изменить объявление переменной на var a:A={member:"foobar"};
без жалоб редактора. После просмотра веб-страницы и поиска другого вопроса на SO я изменил интерфейс на класс, но затем я не могу использовать литералы объектов для создания экземпляров.
Я задавался вопросом, как тип A может исчезнуть, но посмотрите на сгенерированный javascript, который объясняет проблему:
var a = {
member: "foobar"
};
if(a instanceof A) {
alert(a.member);
}
Отсутствует представление A как интерфейса, поэтому проверки типа времени выполнения не возможны.
Я понимаю, что javascript как динамический язык не имеет понятия интерфейсов. Есть ли способ ввести проверку интерфейсов?
Автозаполнение игровой площадки typescript показывает, что typescript даже предлагает метод implements
. Как я могу использовать его?