错误消息:无法调用类型缺少呼叫签名的表达式

时间:2019-04-17 12:12:32

标签: angular typescript

action === 'enable'中的if导致'无法调用类型缺少呼叫签名的表达式。类型'(((value ?: any,options ?: Object) =>无效)| ((opts ?: {onlySelf ?: boolean; glowEvent ?: boolean;})=> void)'没有兼容的呼叫签名。'如果删除此代码段,则会在formGroup.get行中出现错误在if上不会发生错误。

public act(action: string) {
   this.formGroup.get('field1')[action]();
   if (action === 'reset' || (this.userPermissions.field2 === true && action === 'enable')) {
      this.formGroup.get('field2')[action](); //error here <<<<<<<<<<<<
   }
}

有时我调用该函数。

this.act('reset');
this.act('enable');
this.act('disable');
//etc

formGroup启动

const formGroup = this.formBuilder.group({
   field1: [{ value: undefined, disabled: false }, Validators.compose([])],
   field2: [
      { value: 'text' },
      Validators.compose([Validators.required])
      ],
....
return formGroup

1 个答案:

答案 0 :(得分:1)

我猜您正在使用TypeScript 3.2或更低版本。如果您可以更新到TypeScript 3.3或更高版本,则还有更多support for calling unions of functions,希望您的代码完全不会出错:

// TS 3.3 or above
declare const f: ((value?: any, options?: Object) => void) | 
  ((opts?: { onlySelf?: boolean; emitEvent?: boolean; }) => void);
f(); // okay

如果您坚持使用较旧的TypeScript版本,最好的解决方法是使用type assertion告诉编译器您确定自己在做的事是安全的:

// TS 3.2 or below
declare const f: ((value?: any, options?: Object) => void) | 
  ((opts?: { onlySelf?: boolean; emitEvent?: boolean; }) => void);
f(); // error
(f as ()=>void)(); // okay

希望有帮助。祝你好运!