2017-09-21 3 views
1

角度/タイプスクリプトでType<T>で表されるタイプが特定のクラスを拡張するかどうかを実行時にチェックする方法BaseClassタイプ<T>が特定のクラスを拡張しているかどうかを確認

例えば、ApplicationRef.componentTypesを使用してType<any>[]を取得したとします。

const types: Type<any>[] = this.applicationRef.componentTypes; 

this.navigationComponents = types.filter((type: Type<any>) => { 
    // Here we need check whether type extends BaseClass 
}); 

上記のチェックのためのコードがどうあるべきか:今、我々はそれを反復処理し、現在のType<any>は、いくつかのBaseClassを拡張するかどうかを確認したいですか?

答えて

1

原型継承の仕組みで、あなたはそれがBaseClassを拡張するかどうかを判断するためにprototypeinstanceofを使用することができますので:

types.filter((type: Type<any>) => type.prototype instanceof BaseClass); 
+0

ニース、ありがとうございました!私が誤解されていないなら、 'BaseClass'がクラスであり、それがインターフェースであれば動作しません。インターフェイスで動作させる方法はありません。 –

+0

はい、それはクラスでなければなりませんが、コンストラクタだけを 'Type 'に割り当てることができます。とにかく、タイプシステムが消去されるので、インタフェースは実行時には存在しません。 – cartant

関連する問題