我正在instanceof
执行*ngIf
次检查。
<span *ngFor="let element of elements">
<app-text *ngIf="element instanceof BlueElement"></app-text>
</span>
不幸的是,instanceof
无法使用,因为它是由javascript定义的。
因此我创建了自己的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()
函数?
答案 0 :(得分:2)
您只能对构造函数值使用instanceof
。
这意味着它必须是构造函数值,而不是任何旧对象。 TypeScript只要求类的constructor
属性为Function
,因此至少需要指定C extends Function
。如果您想更安全,请将C
限制为实际的构造函数,其特征是new(...args: any[])=>any
。
这也意味着它必须是构造函数 value 而不是 type 。值为clss
,其类型为C
。正如@vu1p3n0x所指出的,你应该写instanceof clss
。你不能写instanceof C
,因为C
只是一种类型,它甚至在运行时都不存在。
把它们放在一起:
function instanceOf<T, C extends new (...args: any[]) => any>(value: T, clss: C): boolean {
return value instanceof clss;
}
另外,请注意,JavaScript value instanceof clss
会评估true
或false
。因此,您只需返回它,而不是使用if
进行检查。
希望有所帮助;祝你好运!