あるオブジェクトが何らかのインターフェースを実装しているかどうかをどのように検出できますか?
if(myObj implements IMyInterface) {
//... do something
}
あるオブジェクトが何らかのインターフェースを実装しているかどうかをどのように検出できますか?
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;
}
ここで、ニーズに合った完全に機能する例を見つけることができます