自定义通用实例函数

时间:2017-12-12 22:48:30

标签: typescript

我正在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()函数?

1 个答案:

答案 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会评估truefalse。因此,您只需返回它,而不是使用if进行检查。

希望有所帮助;祝你好运!