我有一个类,其中有一个“isVisible”属性,可以是布尔值或返回布尔值的函数。
以下代码显示了我当前正在使用的内容,它运行正常,并且可以执行我想要的内容,但在编译时不断获取error TS2349: Cannot invoke an expression whose type lacks a call signature.
。
export class Foo {
isVisible: boolean | ((bar?: any) => boolean);
constructor(isVisible: boolean | ((bar?: any) => boolean) = true) {
this.isVisible= isVisible;
}
}
我的想法是,在评估Foo
的实例时,我会执行以下操作来确定每个实例是否可见:
public isVisible(item: Foo) {
if (typeof item.isVisible === 'boolean') {
return item.isVisible;
}
return item.isVisible(this.thing);
}
编辑:
编译错误消息引用上面代码块中的最后一行(即return item.isVisible(this.thing);
)。
当我运行构建任务时,错误本身是从gulp typescript插件生成的。
编辑2:
事实证明这可能是因为我实际上仍在使用TypeScript 1.8 - 我会尝试升级到2.x并查看是否能解决问题。
答案 0 :(得分:0)
尝试在方法签名末尾添加:boolean
:
public isVisible(item: Foo):boolean {
if (typeof item.isVisible === 'boolean') {
return item.isVisible;
}
return item.isVisible(this.thing);
}
错误是抱怨签名,而不是返回boolean
。添加:boolean
会告诉该方法返回boolean
。