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

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

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector