仅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
答案 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
希望有帮助。祝你好运!