Salut tout le monde ! Cet article est destiné à vous aider à améliorer la façon dont les types de données de votre projet sont connectés, les rendant plus fiables et plus faciles à comprendre.
TLDR pour vous les pressés : évitez de répéter des types et des consts qui font référence à la même chose et essayez de leur donner des noms évocateurs (même s'il s'agit d'une simple chaîne ou d'un nombre). Cela vous permettra d'identifier, de modifier ou de supprimer plus facilement votre code ultérieurement.
Imaginez que vous développez un site Web de commerce électronique et que vous avez défini le type de produit comme :
export type ProductType = { id: string; name: string; price: number; };
Sur un projet de ce genre, vous pouvez facilement trouver de multiples façons de faire référence à l'identifiant d'un produit, à partir de fonctions simples :
Pour des situations plus avancées, telles que la sauvegarde des données d'un produit dans un magasin d'état ou la transmission d'accessoires à d'autres composants dans JS Frameworks
Abordons maintenant le(s) problème(s) avec cette approche :
Pour résoudre le premier problème, vous pouvez utiliser des Types de littéraux de modèle, ce qui donnerait au nouvel identifiant de produit le type : ${string}-${string}-${string}-${string}. Répéter cela sur plusieurs fichiers serait désormais ennuyeux, donc on pourrait soit :
type ProductIdType = `${string}-${string}-${string}-${string}`
Si nécessaire, vous pouvez également créer et faire référence à différents types pour chaque chaîne, ou faire référence à d'autres que vous avez créés précédemment. Enfin, vous utiliseriez le nouveau type comme tel :
(productId : ProductIdType) => {...}
(productId : ProductType['id']) => {...}
Ces deux approches résoudraient le deuxième problème : partout où vous trouveriez ProductIdType ou ProductType['id'], vous sauriez que vous avez affaire à l'identifiant d'un produit et que vous devriez le remplacer.
La première solution peut sembler plus conviviale, mais vous auriez désormais une structure en deux parties, où vous avez un type pour le produit et un autre pour l'identifiant, qui peuvent être utilisés indépendamment. Voici un exemple de représentation de ladite structure :
Il s'agit sans aucun doute d'un problème moindre, mais si vous modifiez/supprimez l'entrée id du ProductType, cette modification ne sera pas reflétée dans l'ensemble de votre projet.
La dernière approche, cependant, est celle que je suis habituellement, car elle augmente le couplage de vos données (faute d'un meilleur mot). Toutes vos références aux données du produit pointent désormais directement vers le ProductType :
Je ne dis pas que vous devriez toujours créer des types pour toutes vos données. Chaque fois que je me vois répéter des références au même type de données, j'opte généralement pour accéder à l'original, comme dans la deuxième approche.
Astuce bonus 1 : Vous pouvez appliquer la même logique pour les consts : si vous vous voyez répéter le même nombre magique ou la même chaîne à plusieurs endroits, il est préférable de lui donner une désignation appropriée et de l'utiliser.
Astuce bonus 2 : Utilisez Choisir, Omettre et Exclure ainsi que d'autres types d'utilitaires si vous souhaitez sélectionner/exclure plusieurs entrées d'un type au lieu de les répéter.
C'est tout ! J'espère que vous avez aimé mon message. N'hésitez pas à laisser vos commentaires sur ce sujet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!