let vs const
étant donné que nous avons deux types de déclarations avec une sémantique de portée similaire, il est naturel de se demander laquelle utiliser.
Comme pour la plupart des questions générales, la réponse est cela dépend.
En appliquant le principe de moindre privilège, toutes les déclarations autres que celles que vous envisagez de modifier doivent utiliser const.
La raison en est que si une variable n'a pas besoin d'être écrite, les autres personnes travaillant sur la même base de code ne devraient pas automatiquement être en
mesure d'écrire sur l'objet et doivent donc déterminer si elles doivent réellement être réaffectées à la variable.
L'utilisation de const rend également le code plus prévisible lors du raisonnement sur le flux de données.
Déstructuration
Une autre fonctionnalité d'
ECMAScript 2015
et de
TypeScript
est la déstructuration.
Déstructuration des tableaux
La forme la plus simple de déstructuration est l'affectation de déstructuration de tableau :
Cela crée deux nouvelles variables nommées
first
et
second
.
Ceci équivaut à utiliser l'indexation, mais est beaucoup plus pratique :
La restructuration fonctionne également avec des variables déjà déclarées :
Et avec les paramètres d'une fonction :
Vous pouvez créer une variable pour les éléments restants d'une liste en utilisant la syntaxe suivante ... :
Bien sûr, puisqu'il s'agit de
JavaScript
, vous pouvez simplement ignorer les éléments de fin qui vous importent peu :
Ou d'autres éléments :
Déstructuration d'objet
Vous pouvez également déstructurer des objets :
Cela crée de nouvelles variables
a
et
b
de
o.a
et
o.b
.
Notez que vous pouvez sauter
c
si vous n'en avez pas besoin.
Comme pour la déstructuration de tableau, vous pouvez avoir une affectation sans déclaration :
Notez que nous avons dû entourer cette déclaration de parenthèses.
JavaScript
analyse normalement
a
comme le début du bloc.
Vous pouvez créer une variable pour les éléments restants d'un objet en utilisant la syntaxe suivante ...:
Renommage de propriété
Vous pouvez également donner différents noms aux propriétés :
Ici, la syntaxe commence à devenir confuse.
Vous pouvez lire
a: newName1
comme "
a
comme
newName1
".
La direction est de gauche à droite, comme si vous aviez écrit :
De manière confuse, les deux points ici n'indiquent pas le type.
Le type, si vous le spécifiez, doit encore être écrit après la déstructuration complète :
Les valeurs par défaut
Les valeurs par défaut vous permettent de spécifier une valeur par défaut dans le cas où une propriété n'est pas définie :
keepWholeObject
a maintenant une variable pour
wholeObject
ainsi que les propriétés
a
et
b
, même si
b
est indéfini.
Déclarations de fonction
La destruction fonctionne également dans les déclarations de fonction.
Pour les cas simples, ceci est simple :
Toutefois, la définition de paramètres par défaut est plus courante pour les paramètres et il peut être délicat de définir correctement les paramètres
par défaut avec la déstructuration. Tout d'abord, vous devez vous rappeler de mettre le motif avant la valeur par défaut.
L'extrait ci-dessus est un exemple d'inférence de type.
Ensuite, vous devez vous rappeler de donner une valeur par défaut pour les propriétés facultatives sur la propriété déstructurée au lieu de l'initialiseur principal.
Rappelez-vous que
C
a été défini avec
b
optionnel :
Utilisez la déstructuration avec soin. Comme le montre l'exemple précédent, toute expression de déstructuration la plus simple confond.
Cela est particulièrement vrai avec la déstructuration profondément imbriquée, qui devient très difficile à comprendre même sans empiler sur le renommage,
les valeurs par défaut et les annotations de type. Essayez de garder les expressions de déstructuration petites et simples.
Vous pouvez toujours écrire les affectations que la déstructuration générerait vous-même.
Propager
L'opérateur d'étalement est l'opposé de la déstructuration.
Il vous permet de répartir un tableau dans un autre tableau ou un objet dans un autre objet. Par exemple :
Cela donne à
bothPlus
la valeur
[0, 1, 2, 3, 4, 5]
.
La propagation crée une copie superficielle des premier et deuxième.
Ils ne sont pas modifiés par la propagation.
Vous pouvez également écarter des objets :
Maintenant, la recherche est
{food: "rich", prix: "$$", ambiance: "noisy"}
.
La propagation d'objets est plus complexe que la diffusion de tableaux.
Comme la propagation de tableau, elle se fait de gauche à droite, mais le résultat est toujours un objet.
Cela signifie que les propriétés apparaissant plus tard dans l'objet répandu écrasent les propriétés apparaissant plus tôt.
Donc, si nous modifions l'exemple précédent pour qu'il s'étende à la fin :
Ensuite, la propriété
food
par défaut écrase la
food: "rich"
, ce qui n'est pas ce que nous voulons dans ce cas.
La propagation d'un objet a également quelques autres limites surprenantes.
Tout d'abord, il n'inclut que les propriétés énumérables propres à un objet.
En gros, cela signifie que vous perdez des méthodes lorsque vous répartissez les instances d'un objet :
Deuxièmement, le compilateur
Typescript
n'autorise pas les paramètres de type
spreads
à partir de fonctions génériques.
Cette fonctionnalité est attendue dans les futures versions du langage.