2017-12-12 13 views
0

instanceofのチェックを*ngIfで実行しています。残念ながらカスタム汎用機能

<span *ngFor="let element of elements"> 
    <app-text *ngIf="element instanceof BlueElement"></app-text> 
</span> 

それはJavaScriptで定義されているため、instanceofは、使用することはできません。

そこで私は自分のinstanceOf方法作成:

instanceOf<T,C>(value:T,clss:C){ 
    if (value instanceof C){ 
     return true; 
    }else{ 
     return false; 
    } 
    } 

私はエラーを取得していますが、 C is only defined as a type, but is being used as a value here.

汎用instanceOf()の機能はどのように書き換える必要がありますか?

+1

あなたは 'value instanceof clss'を必要とします。 – vu1p3n0x

答えて

1

instanceofは、コンストラクタ値でのみ使用できます。

つまり、ちょうど古いオブジェクトではなく、という値がコンストラクタである必要があります。 TypeScriptでは、クラスのconstructorプロパティはFunctionである必要があります。少なくとも、C extends Functionを指定する必要があります。より安全にしたい場合は、をnew(...args: any[])=>anyのような実際のコンストラクタ関数に制限してください。

タイプではなく、である必要があります。値はclssで、タイプはCです。 @vu1p3n0xで指摘されているように、instanceof clssと書いてください。 Cは単なる型であり、実行時に存在しないので、instanceof Cを書くことはできません。

それを一緒に置く:余談として

function instanceOf<T, C extends new (...args: any[]) => any>(value: T, clss: C): boolean { 
    return value instanceof clss; 
} 

を、JavaScriptのvalue instanceof clsstrueまたはfalseのいずれかを評価することに注意してください。だから、ifでチェックするのではなく、返すことができます。

希望があれば、がんばろう!

関連する問題