23

あるオブジェクトが何らかのインターフェースを実装しているかどうかをどのように検出できますか?

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

2 に答える 2

9

はい。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;
}

ここで、ニーズに合った完全に機能する例を見つけることができます

于 2016-08-27T14:40:19.130 に答える