首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >动态检测对象是否在TypeScript中实现接口

动态检测对象是否在TypeScript中实现接口
EN

Stack Overflow用户
提问于 2013-04-15 19:10:24
回答 2查看 12.9K关注 0票数 23

有没有办法,我怎样才能检测到某个object是否实现了某个接口?

if(myObj implements IMyInterface) {
    //... do something
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-27 22:40:19

是,。现在,您可以使用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

票数 9
EN

Stack Overflow用户

发布于 2013-04-15 21:40:07

不是的。

目前,类型仅在开发和编译时使用。类型信息不会以任何方式转换为编译后的JavaScript代码。

通过编译器生成一些代码,这将是可能的。目前,TypeScript团队正试图向最终的扩展添加尽可能少的代码,例外的是‘JavaScript’关键字,它将一个新方法添加到编译后的输出中。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16013667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档