有什么办法,我该如何检测一些对象是否实现了一些接口?动态检测TypeScript中的对象实现接口
if(myObj implements IMyInterface) {
//... do something
}
有什么办法,我该如何检测一些对象是否实现了一些接口?动态检测TypeScript中的对象实现接口
if(myObj implements IMyInterface) {
//... do something
}
是。现在,您可以使用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;
}
你可以找到适合您的需要here
号
目前,类型只在开发和编译时使用。 类型信息不会以任何方式转换为已编译的JavaScript代码。
随着编译器生成一些代码,这是可能的。目前,TypeScript团队正在尝试向最终JavaScript添加尽可能少的代码,例外是“扩展”关键字,它为编译后的输出添加了一种新方法。
是的,你可以用组合的类型验证这样做一个完整的工作示例。看看这个库:https://github.com/pelotom/runtypes
它是否适用于对象文字? –
是的。如果您必须测试的对象不是类的实例,则可以逐字段进行检查。你传递给方法的接口元对象会告诉你所有的细节(可选的字段等等),你可以检查那些对象。这种检查速度较慢,但会起作用。作为起点,请参阅[this](https://github.com/pcan/reflec-ts-examples/tree/master/simple-validator)示例。 – pcan
它是否适用于空接口? –