Ответ 1
Да. Теперь вы можете сделать это, используя расширенную версию компилятора TypeScript, которая позволяет вам узнать, какой интерфейс реализует каждый класс вашего приложения. Эта версия компилятора хранит информацию всех типов до времени выполнения и связывает эту информацию с фактическими конструкторами. Например, вы можете написать примерно следующее:
function implementsInterface(object: Object, target: Interface) {
const objClass: Class = object.constructor && object.constructor.getClass();
if (objClass && objClass.implements) {
let found = false;
for (let base of objClass.implements) {
let found = interfaceExtends(base, target);
if (found) {
return true;
}
}
}
return false;
}
// recursive interface inheritance check
function interfaceExtends(i: Interface, target: Interface) {
if (i === target) {
return true;
}
if (i.extends) {
let found = false;
for (let base of i.extends) {
// do a recursive check on base interface...
found = interfaceExtends(base, target);
if (found) {
return true;
}
}
}
return false;
}
Вы можете найти полный рабочий пример, который соответствует вашим потребностям здесь