Comment implémenter la surcharge de fonctions dans TypeScript
La surcharge de fonctions est une fonctionnalité TypeScript qui nous permet de définir une fonction qui accepte différents types d’arguments.
TypeScript ajoute principalement des fonctionnalités de vérification du type de données qui manquent dans JavaScript. Cela facilite la programmation puisque nous n’avons pas besoin de vérifier nous-mêmes le type de données des variables et autres valeurs.
Nous pouvons écrire nos programmes JavaScript en TypeScript. Ensuite, nous pouvons compiler le code TypeScript en JavaScript afin qu’il puisse être exécuté par des environnements d’exécution JavaScript tels que le navigateur et Node.js.
Une fonctionnalité utile disponible dans TypeScript est la surcharge de fonctions. La surcharge de fonctions est une fonctionnalité qui nous permet de définir une fonction qui accepte différents types d’arguments.
Dans cet article, nous verrons comment implémenter la surcharge de fonctions dans notre code TypeScript.
Surcharge de fonctions dans TypeScript
Avec TypeScript, nous pouvons définir une fonction qui accepte différents types d’arguments avec surcharge de fonctions.
Pour l’utiliser, il suffit d’ajouter toutes les signatures possibles pour une fonction pour les combinaisons d’arguments que nous voulons que la fonction accepte.
Par exemple, pour implémenter la surcharge de fonctions dans TypeScript, nous pouvons écrire quelque chose comme ce qui suit :
functionadd(a:number, b:number):number;functionadd(a:string, b:string):number;functionadd(a: unknown, b: unknown):number{if(typeof a ==="string"&&typeof b ==="string"){returnNumber(a)+Number(b);}elseif(typeof a ==="number"&&typeof b ==="number"){return a + b;}return0;}
Nous avons deux signatures différentes pour le add fonction et ils ont tous deux un type de retour défini sur number.
La première signature s’attend à ce que les deux paramètres a et b sont des nombres. Et la deuxième signature s’attend à ce que les deux paramètres a et b sont des chaînes.
Pour implémenter la fonction, nous faisons a et b accepte le unknown type, ce qui nous permet de transmettre n’importe quoi pour a et b.
Dans le corps de la fonction, nous vérifions les types de données de a et b avec le typeof opérateur. Si a et b sont les deux chaînes, nous convertissons a et b aux nombres avec le Number fonction, puis obtenez la somme des nombres. S’il s’agit de deux nombres, nous renvoyons simplement leur somme. Sinon, nous renvoyons 0.
Le unknown type est une contrepartie de type sécurisé de any. Nous ne pouvons pas attribuer de valeurs avec unknown tapez dans n’importe quelle variable. Mais nous pouvons convertir unknown tapez les valeurs sur quelque chose d’autre qui correspond au type de la variable.
Avec le typeof chèques, nous avons restreint les types de a et b à un type de données afin que TypeScript puisse déduire le type et effectuer les opérations pour les variables avec le type déduit.
Ensuite, nous pourrons appeler add en écrivant:
const sum1 =add(1,2);const sum2 =add("1","2");
Nous appelons add avec les valeurs attendues par au moins une des signatures, il réussit donc les vérifications de type effectuées par le compilateur TypeScript.
Si nous appelons add avec des valeurs qui ne sont attendues par aucune des signatures comme :
const sum3 =add(1,"2");
Ensuite, le compilateur TypeScript générera une erreur de vérification de type.
La signature de l’implémentation de la fonction doit être plus générale que les signatures de surcharge. De cette façon, la fonction avec surcharges peut accepter différents types de valeurs attendues par au moins une des signatures.
Surcharge de méthode
Nous pouvons également surcharger les méthodes de constructeur ou de classe.
Par exemple, nous pouvons écrire quelque chose comme :
classGreeter{
message:string;constructor(message:string){this.message = message;}greet(person:string):string;greet(persons:string[]):string;greet(person: unknown){if(typeof person ==="string"){return`${this.message}, ${person}!`;}elseif(Array.isArray(person)){return person.map((name)=>`${this.message}, ${name}!`).join("\n");}return"";}}
Nous définissons le Greeter classe avec le greet méthode dedans. Le greet La méthode est surchargée avec deux signatures différentes. Le premier prend un string et renvoie un string. La seconde prend un string tableau et renvoie également un string.
Dans la mise en œuvre, nous faisons le person fonction a un unknown taper. Nous pouvons ajouter un type de retour ou l’omettre puisque le compilateur TypeScript peut déduire le type de retour de l’implémentation. Nous pouvons vérifier la valeur de person dans la mise en œuvre avec nos propres contrôles de type.
Nous vérifions d’abord si person est une chaîne avec typeof person === "string". Ensuite, nous vérifions si person est un tableau avec Array.isArray.
Ensuite, nous pouvons créer un Greeter exemple et appelez le greet méthode en écrivant :
Nous créons un Greeter exemple avec new. Et puis nous appelons greet sur l’instance soit avec une chaîne ou un tableau de chaînes que nous avons spécifié avec les signatures.
Quand utiliser la surcharge de fonctions ?
Idéalement, nous utilisons la surcharge de fonctions uniquement lorsque nous attendons des arguments obligatoires de types différents.
Les exemples ci-dessus n’ont tous que des paramètres obligatoires, mais ils peuvent avoir des types différents. Si nous attendons des arguments facultatifs, nous pouvons utiliser la syntaxe des paramètres facultatifs à la place.
Par exemple, au lieu d’écrire quelque chose comme :
Puisque nous acceptons param1 et param2 comme paramètres facultatifs, nous pouvons utiliser ? pour les désigner comme tels.
Conclusion
La surcharge de fonctions est une fonctionnalité de TypeScript qui nous permet de définir une fonction qui accepte différents types d’arguments.
Nous pouvons utiliser la surcharge de fonctions pour spécifier tout type de paramètres de fonction. Mais idéalement, nous les utilisons uniquement pour les paramètres requis puisque TypeScript a déjà une syntaxe simple de paramètres de fonction facultative.
Nous pouvons avoir des surcharges de fonctions pour les fonctions régulières et les méthodes de classe.
mai 17, 2024
Comment implémenter la surcharge de fonctions dans TypeScript
La surcharge de fonctions est une fonctionnalité TypeScript qui nous permet de définir une fonction qui accepte différents types d’arguments.
TypeScript ajoute principalement des fonctionnalités de vérification du type de données qui manquent dans JavaScript. Cela facilite la programmation puisque nous n’avons pas besoin de vérifier nous-mêmes le type de données des variables et autres valeurs.
Nous pouvons écrire nos programmes JavaScript en TypeScript. Ensuite, nous pouvons compiler le code TypeScript en JavaScript afin qu’il puisse être exécuté par des environnements d’exécution JavaScript tels que le navigateur et Node.js.
Une fonctionnalité utile disponible dans TypeScript est la surcharge de fonctions. La surcharge de fonctions est une fonctionnalité qui nous permet de définir une fonction qui accepte différents types d’arguments.
Dans cet article, nous verrons comment implémenter la surcharge de fonctions dans notre code TypeScript.
Surcharge de fonctions dans TypeScript
Avec TypeScript, nous pouvons définir une fonction qui accepte différents types d’arguments avec surcharge de fonctions.
Pour l’utiliser, il suffit d’ajouter toutes les signatures possibles pour une fonction pour les combinaisons d’arguments que nous voulons que la fonction accepte.
Par exemple, pour implémenter la surcharge de fonctions dans TypeScript, nous pouvons écrire quelque chose comme ce qui suit :
Nous avons deux signatures différentes pour le
add
fonction et ils ont tous deux un type de retour défini surnumber
.La première signature s’attend à ce que les deux paramètres
a
etb
sont des nombres. Et la deuxième signature s’attend à ce que les deux paramètresa
etb
sont des chaînes.Pour implémenter la fonction, nous faisons
a
etb
accepte leunknown
type, ce qui nous permet de transmettre n’importe quoi poura
etb
.Dans le corps de la fonction, nous vérifions les types de données de
a
etb
avec letypeof
opérateur. Sia
etb
sont les deux chaînes, nous convertissonsa
etb
aux nombres avec leNumber
fonction, puis obtenez la somme des nombres. S’il s’agit de deux nombres, nous renvoyons simplement leur somme. Sinon, nous renvoyons 0.Le
unknown
type est une contrepartie de type sécurisé deany
. Nous ne pouvons pas attribuer de valeurs avecunknown
tapez dans n’importe quelle variable. Mais nous pouvons convertirunknown
tapez les valeurs sur quelque chose d’autre qui correspond au type de la variable.Avec le
typeof
chèques, nous avons restreint les types dea
etb
à un type de données afin que TypeScript puisse déduire le type et effectuer les opérations pour les variables avec le type déduit.Ensuite, nous pourrons appeler
add
en écrivant:Nous appelons
add
avec les valeurs attendues par au moins une des signatures, il réussit donc les vérifications de type effectuées par le compilateur TypeScript.Si nous appelons
add
avec des valeurs qui ne sont attendues par aucune des signatures comme :Ensuite, le compilateur TypeScript générera une erreur de vérification de type.
La signature de l’implémentation de la fonction doit être plus générale que les signatures de surcharge. De cette façon, la fonction avec surcharges peut accepter différents types de valeurs attendues par au moins une des signatures.
Surcharge de méthode
Nous pouvons également surcharger les méthodes de constructeur ou de classe.
Par exemple, nous pouvons écrire quelque chose comme :
Nous définissons le
Greeter
classe avec legreet
méthode dedans. Legreet
La méthode est surchargée avec deux signatures différentes. Le premier prend unstring
et renvoie unstring
. La seconde prend unstring
tableau et renvoie également unstring
.Dans la mise en œuvre, nous faisons le
person
fonction a ununknown
taper. Nous pouvons ajouter un type de retour ou l’omettre puisque le compilateur TypeScript peut déduire le type de retour de l’implémentation. Nous pouvons vérifier la valeur deperson
dans la mise en œuvre avec nos propres contrôles de type.Nous vérifions d’abord si
person
est une chaîne avectypeof person === "string"
. Ensuite, nous vérifions siperson
est un tableau avecArray.isArray
.Ensuite, nous pouvons créer un
Greeter
exemple et appelez legreet
méthode en écrivant :Nous créons un
Greeter
exemple avecnew
. Et puis nous appelonsgreet
sur l’instance soit avec une chaîne ou un tableau de chaînes que nous avons spécifié avec les signatures.Quand utiliser la surcharge de fonctions ?
Idéalement, nous utilisons la surcharge de fonctions uniquement lorsque nous attendons des arguments obligatoires de types différents.
Les exemples ci-dessus n’ont tous que des paramètres obligatoires, mais ils peuvent avoir des types différents. Si nous attendons des arguments facultatifs, nous pouvons utiliser la syntaxe des paramètres facultatifs à la place.
Par exemple, au lieu d’écrire quelque chose comme :
Nous pouvons remplacer les surcharges par des paramètres facultatifs en écrivant quelque chose comme :
Puisque nous acceptons
param1
etparam2
comme paramètres facultatifs, nous pouvons utiliser?
pour les désigner comme tels.Conclusion
La surcharge de fonctions est une fonctionnalité de TypeScript qui nous permet de définir une fonction qui accepte différents types d’arguments.
Nous pouvons utiliser la surcharge de fonctions pour spécifier tout type de paramètres de fonction. Mais idéalement, nous les utilisons uniquement pour les paramètres requis puisque TypeScript a déjà une syntaxe simple de paramètres de fonction facultative.
Nous pouvons avoir des surcharges de fonctions pour les fonctions régulières et les méthodes de classe.
Source link
Partager :
Articles similaires