有什么办法,如何检测某个对象是否实现了某个接口?
if(myObj implements IMyInterface) {
//... do something
}
不。
目前,类型仅在开发和编译期间使用。类型信息不会以任何方式转换为已编译的 JavaScript 代码。
通过编译器生成一些代码,这是可能的。目前,TypeScript 团队正试图在最终的 JavaScript 中添加尽可能少的代码,例外是“extends”关键字,它为编译的输出添加了一个新方法。
是的。现在你可以做到这一点,使用增强版的 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;
}
您可以在此处找到适合您需求的完整工作示例