J'ai la classe suivante dans TypeScript:
class CallbackTest
{
public myCallback;
public doWork(): void
{
//doing some work...
this.myCallback(); //calling callback
}
}
J'utilise la classe comme ceci:
var test = new CallbackTest();
test.myCallback = () => alert("done");
test.doWork();
Le code fonctionne, il affiche donc une boîte de message comme prévu.
Ma question est la suivante: y a-t-il un type que je peux fournir pour mon champ de classe myCallback
? À l'heure actuelle, le champ public myCallback
est du type any
indiqué ci-dessus. Comment puis-je définir la signature de méthode du callback? Ou puis-je simplement définir le type sur une sorte de type de rappel? Ou puis-je faire rien de tout cela? Dois-je utiliser any
(implicite / explicite)?
J'ai essayé quelque chose comme ça, mais cela n'a pas fonctionné (erreur de compilation):
public myCallback: ();
// or:
public myCallback: function;
Je n'ai trouvé aucune explication à cela en ligne, alors j'espère que vous pourrez m'aider.
la source
Pour aller plus loin, vous pouvez déclarer un pointeur de type vers une signature de fonction comme:
et utilisez-le comme ceci:
la source
let callback: myCallbackType|null = null;
type MyHandler = (myArgument: string) => void
plutôt. (Callable-types)" ; voir la réponse de TSV...args: any[]
. Exemple: interface d'exportation MyInterface {/ ** Une fonction de rappel. / callback: (... args: any []) => any, / * Paramètres de la fonction de rappel. * / callbackParams: any []}Vous pouvez déclarer un nouveau type:
Mettre à jour.
Le
declare
mot-clé n'est pas nécessaire. Il doit être utilisé dans les fichiers .d.ts ou dans des cas similaires.la source
var handler: (myArgument: string) => void
est syntaxiquement valide (si un peu désordonnée).Voici un exemple - n'accepter aucun paramètre et ne rien renvoyer.
Si vous souhaitez accepter un paramètre, vous pouvez également l'ajouter:
Et si vous souhaitez renvoyer une valeur, vous pouvez également l'ajouter:
la source
exactly equivalent
.Si vous voulez une fonction générique, vous pouvez utiliser ce qui suit. Bien que cela ne semble pas être documenté nulle part.
la source
Vous pouvez utiliser les éléments suivants:
type
mot-clé, aliasing un littéral de fonction)Voici un exemple de leur utilisation:
la source
Je suis tombé sur la même erreur en essayant d'ajouter le rappel à un écouteur d'événements. Étrangement, définir le type de rappel sur EventListener l'a résolu. Cela semble plus élégant que de définir une signature de fonction entière en tant que type, mais je ne suis pas sûr que ce soit la bonne façon de faire.
la source
Je suis un peu en retard, mais depuis quelque temps dans TypeScript vous pouvez définir le type de rappel avec
Exemple d'utilisation:
la source