Error: Cannot invoke an expression whose type lacks a call signature

后端 未结 8 2093
执笔经年
执笔经年 2020-12-02 17:50

I am brand new to typescript, and I have two classes. In the parent class I have:

abstract class Component {
  public deps: any = {};
  public props: any = {         


        
8条回答
  •  一向
    一向 (楼主)
    2020-12-02 18:19

    Let's break this down:

    1. The error says

      Cannot invoke an expression whose type lacks a call signature.

    2. The code:

    The problem is in this line public toggleBody: string; &

    it's relation to these lines:

    ...
    return this.toggleBody(true);
    ...
    return this.toggleBody(false);
    
    1. The result:

    Your saying toggleBody is a string but then your treating it like something that has a call signature (i.e. the structure of something that can be called: lambdas, proc, functions, methods, etc. In JS just function tho.). You need to change the declaration to be public toggleBody: (arg: boolean) => boolean;.

    Extra Details:

    "invoke" means your calling or applying a function.

    "an expression" in Javascript is basically something that produces a value, so this.toggleBody() counts as an expression.

    "type" is declared on this line public toggleBody: string

    "lacks a call signature" this is because your trying to call something this.toggleBody() that doesn't have signature(i.e. the structure of something that can be called: lambdas, proc, functions, methods, etc.) that can be called. You said this.toggleBody is something that acts like a string.

    In other words the error is saying

    Cannot call an expression (this.toggleBody) because it's type (:string) lacks a call signature (bc it has a string signature.)

提交回复
热议问题