2017-01-30 3 views
0

私はブールまたはブール値を返す関数のいずれかになります「のisVisible」プロパティが存在しているクラスがあります。エラーTS2349組合タイピング(ブールと機能)を使用して

次のコードは、私は現在正常に動作され、使用して、そして私が欲しいものを行いますが、コンパイルに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:
それは私が実際にはまだ活字体1.8を使用していますので、これはかもしれ判明 - 私は2.xと定着剤が発行するかどうかを確認するためにアップグレードしてみます。あなたのメソッドのシグネチャの終わりに:booleanを追加

+0

エラーはどこですか?私はそれを再生できません –

答えて

0

試してみてください。

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

    return item.isVisible(this.thing); 
} 

エラーがbooleanを返さない、署名について不平を言っています。 :booleanを追加すると、メソッドがbooleanを返すことがわかります。

関連する問題