Actuellement, j'ai une définition de type comme:
interface Param {
title: string;
callback: any;
}
J'ai besoin de quelque chose comme:
interface Param {
title: string;
callback: function;
}
mais le 2ème n'est pas accepté.
javascript
typescript
Smrutiranjan Sahu
la source
la source
Function
comme indiqué dans la première ligne de cette réponse, et dites-vous que le deuxième paragraphe (en utilisant le type de() => void
ou ce qui correspond au cas d'utilisation) est préféré?Typescript de v1.4 a le
type
mot - clé qui déclare un alias de type (analogue à untypedef
en C / C ++). Vous pouvez déclarer votre type de rappel ainsi:qui déclare une fonction qui ne prend aucun argument et ne renvoie rien. Une fonction qui prend zéro ou plusieurs arguments de tout type et ne renvoie rien serait:
Ensuite, vous pouvez dire, par exemple,
Si vous voulez une fonction qui accepte un nombre arbitraire d'arguments et renvoie n'importe quoi (y compris void):
Vous pouvez spécifier des arguments obligatoires puis un ensemble d'arguments supplémentaires (disons une chaîne, un nombre puis un ensemble d'arguments supplémentaires) ainsi:
Cela peut être utile pour des choses comme les gestionnaires EventEmitter.
Les fonctions peuvent être saisies aussi fortement que vous le souhaitez de cette façon, bien que vous puissiez vous laisser emporter et rencontrer des problèmes combinatoires si vous essayez de tout clouer avec un alias de type.
la source
Function
et(...args: any[]) => any
qu'est-ce qui est préféré?...args: any[]
n'est pas très utile.type CallbackFunctionSomeVariadic = (arg1: string, arg2: number, ...args: any[]) => void;
ce que je cherchais, ty.À la suite de la réponse de Ryan, je pense que l'interface que vous recherchez est définie comme suit:
la source
Voici un exemple de fonction qui accepte un rappel
Si vous ne vous souciez pas des valeurs de retour des rappels (la plupart des gens ne savent pas comment les utiliser de manière efficace), vous pouvez utiliser
void
Remarque, la signature que j'ai utilisée pour le
callback
paramètre ...Je dirais que c'est une déficience TypeScript car nous sommes censés fournir un nom pour les paramètres de rappel. Dans ce cas, j'ai utilisé
_
car il n'est pas utilisable à l'intérieur dusqk
fonction.Cependant, si vous faites cela
Ses TypeScript valide , mais il sera interprété comme ...
C'est-à-dire que TypeScript pensera que le paramètre nom est
number
et le type implicite l'estany
. Ce n'est évidemment pas ce que nous voulions, mais hélas, c'est ainsi que TypeScript fonctionne.N'oubliez donc pas de fournir les noms des paramètres lors de la saisie des paramètres de votre fonction ... aussi stupide que cela puisse paraître.
la source
Vous pouvez définir un type de fonction dans l'interface de différentes manières,
L'utilisation est très simple,
la source
Il existe quatre types de fonctions abstraites, vous pouvez les utiliser séparément lorsque vous savez que votre fonction prendra ou non un argument, retournera des données ou non.
comme ça:
Pour utiliser un seul type comme n'importe quel type de fonction, nous pouvons combiner tous les types abstraits, comme ceci:
puis utilisez-le comme:
Dans l'exemple ci-dessus, tout est correct. Mais l'exemple d'utilisation ci-dessous n'est pas correct du point de vue de la plupart des éditeurs de code.
Un appel correct aux éditeurs est le suivant:
la source
Vous pouvez déclarer le rappel comme 1) propriété de fonction ou 2) méthode :
Il existe une différence de frappe importante depuis TS 2.6 :
Vous obtenez des types plus forts ("son") en mode
--strict
ou--strictFunctionTypes
, lorsqu'une propriété de fonction est déclarée. Prenons un exemple:Techniquement parlant, les méthodes sont bivariantes et les propriétés des fonctions contravariantes dans leurs arguments ci-dessous
strictFunctionTypes
. Les méthodes sont toujours vérifiées de manière plus permissive (même si elles ne sont pas saines) pour être un peu plus pratiques en combinaison avec des types intégrés commeArray
.Résumé
Exemple de code Playground
la source