135 votes

Erreur : Impossible d'invoquer une expression dont le type n'a pas de signature d'appel

Je suis tout nouveau dans le domaine du tapuscrit, et j'ai deux classes. Dans la classe mère, j'ai :

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

  public setProp(prop: string): any {
    return <T>(val: T): T => {
      this.props[prop] = val;
      return val;
    };
  }
}

Dans la classe des enfants, j'ai :

class Post extends Component {
  public toggleBody: string;

  constructor() {
    this.toggleBody = this.setProp('showFullBody');
  }

  public showMore(): boolean {
    return this.toggleBody(true);
  }

  public showLess(): boolean {
    return this.toggleBody(false);
  }
}

ShowMore et ShowLess me renvoient tous deux l'erreur suivante : "Cannot invoke an expression whose type lacks a call signature" (Impossible d'invoquer une expression dont le type n'a pas de signature d'appel).

Mais la fonction renvoyée par setProp a bien une signature d'appel, je pense ? Je pense que je n'ai pas compris quelque chose d'important sur le typage des fonctions, mais je ne sais pas ce que c'est.

Merci de votre attention !

1 votes

togglrBody ne doit pas être une chaîne de caractères, puisque vous voulez qu'il s'agisse d'une fonction

1 votes

@eavidan oui c'est une fonction qui renvoie un booléen. Je pensais à l'origine qu'elle renverrait une chaîne de caractères. Je ne sais pas si c'est le cas, mais je ne sais pas si c'est le cas.

0 votes

Quel que soit le résultat de setProp, qui semble être <T>(val: T) => T

0voto

Afshin Ghazi Points 3

Ajoutez un type à votre variable, puis retournez.

Eg :

const myVariable : string [] = ['hello', 'there'];

const result = myVaraible.map(x=> {
  return
  {
    x.id
  }
});

\=> La partie importante est l'ajout du type string[] etc :

0voto

Charlie Weems Points 580

J'ai eu le même message d'erreur. Dans mon cas, j'avais mélangé par inadvertance les versions ES6 export default function myFunc syntaxe avec const myFunc = require('./myFunc'); .

Utilisation module.exports = myFunc; a plutôt résolu le problème.

0voto

Cette erreur peut se produire lorsque vous demandez une valeur à quelque chose et que vous mettez des parenthèses à la fin, comme s'il s'agissait d'un appel de fonction, alors que la valeur est correctement récupérée sans parenthèses finales. Par exemple, si ce à quoi vous accédez est une propriété "get" en Typescript.

private IMadeAMistakeHere(): void {
    let mynumber = this.SuperCoolNumber();
}

private IDidItCorrectly(): void {
    let mynumber = this.SuperCoolNumber;
}

private get SuperCoolNumber(): number {
    let response = 42;
    return response;
};

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X