使用联合键入时出错TS2349(布尔和函数)

时间:2017-01-30 13:34:52

标签: javascript typescript

我有一个类,其中有一个“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并查看是否能解决问题。

1 个答案:

答案 0 :(得分:0)

尝试在方法签名末尾添加:boolean

public isVisible(item: Foo):boolean {
     if (typeof item.isVisible === 'boolean') {
         return item.isVisible;
     }

     return item.isVisible(this.thing);
}

错误是抱怨签名,而不是返回boolean。添加:boolean会告诉该方法返回boolean