Проверка типа интерфейса с помощью 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
, Как я могу использовать это?