Une collision de noms se produit lorsque deux composants de code ou plus utilisent le même nom pour une variable, une fonction ou une classe. Ils sont courants dans les grands projets où de nombreuses personnes travaillent sur la même base de code. Ils peuvent compliquer la détermination du composant de code responsable des bogues.
À l'aide d'espaces de noms, vous pouvez organiser et gérer votre code afin que des groupes de composants associés soient sous un identifiant commun. Cela atténuera le risque de conflits de noms.
Création d'un espace de noms
Vous pouvez créer des espaces de noms dans TypeScript en utilisant le espace de noms mot-clé. Faites-le suivre d'un identifiant pour nommer l'espace de noms et d'un bloc entouré d'accolades. La syntaxe est similaire à celle que vous utiliseriez pour créer une classe en JavaScript.
Par exemple:
espace de noms Exemple {}
Vous pouvez ensuite déclarer les membres de l'espace de noms (variables, fonctions et classes) dans le bloc d'espace de noms :
espace de noms Exemple {
exporterfonctionFoo(): annuler{
console.enregistrer("Ceci est une fonction à l'intérieur de l'espace de noms Example");
}exporterclasse Bar {
propriété: chaîne;constructeur(propriété: chaîne) {
ce.propriété = propriété ;
}
}
exporterconstante baz = "Ceci est une variable d'espace de noms"
}
Dans l'exemple ci-dessus, Foo, Bar, et baz sont membres de la Exemple espace de noms. Par défaut, vous ne pouvez accéder qu'aux membres d'un espace de noms à l'intérieur de ce même espace de noms. Utilisez le exporter mot-clé pour rendre chaque membre de l'espace de noms accessible en dehors de celui-ci.
Vous pouvez accéder à tous les membres publiquement disponibles d'un espace de noms en appelant le nom du membre de l'espace de noms en utilisant la notation par points :
Exemple.foo(); // Ceci est une fonction à l'intérieur de l'espace de noms Example
constante barre = nouveau Exemple. Bar("chaîne");
console.log (bar.propriété); // chaîne
console.log (Exemple.baz); // Ceci est une variable d'espace de noms
Espaces de noms imbriqués
TypeScript vous permet d'imbriquer des espaces de noms dans d'autres espaces de noms pour créer une structure hiérarchique pour votre code. L'imbrication des espaces de noms peut réduire davantage les risques de collisions de noms en regroupant les espaces de noms associés sous un identifiant commun.
Par exemple:
espace de noms Exemple {
exporterconstante propriété_1 = "Fou";exporterespace de noms Bar {
exporterconstante printFoo = fonction () {
console.log (propriété_1);
};
}exporterespace de noms Baz {
exporterclasse Fou {
propriété: chaîne;
constructeur(propriété: chaîne) {
ce.propriété = propriété ;
}
}
}
}
Le bloc de code ci-dessus fournit un exemple d'espace de noms imbriqué. Le Exemple espace de noms est l'espace de noms de niveau supérieur, contenant le Bar l'espace de noms et le Baz espace de noms.
Vous pouvez accéder aux propriétés dans un espace de noms imbriqué à l'aide d'une notation par points qui suit la structure hiérarchique que vous avez créée.
Par exemple:
console.log (Exemple.property_1); // Foo
Exemple. Bar.printFoo() // Foo
constante foo = nouveau Exemple. Baz. Fou("exemple")
Cet exemple de code accède à chaque membre de l'espace de noms via l'espace de noms parent. Accéder directement à une propriété, au lieu de passer par son espace de noms parent, générerait une erreur :
Exemple.printFoo()
// erreur TS2339: la propriété 'printFoo' n'existe pas sur le type 'typeof Example'
Bien que les espaces de noms imbriqués puissent vous aider à organiser votre code, les espaces de noms profondément imbriqués peuvent produire l'effet inverse. Les espaces de noms profondément imbriqués rendent votre code plus difficile à lire et à maintenir.
Alias d'espace de noms
Un alias d'espace de noms est un nom abrégé donné à un membre de l'espace de noms, ce qui facilite la référence.
Vous pouvez créer un alias d'espace de noms à l'aide de importer mot-clé suivi du nom que vous souhaitez attribuer à l'alias. Attribuez ensuite le importer mot-clé et le nom d'alias à un membre de l'espace de noms.
Par exemple:
espace de noms Voiture {
exporterespace de noms Tesla {
exporterclasse ModèleX {
créer(): Chaîne {
retour"Modèle X créé"
}
}
}exporterespace de noms Toyota{
exporterclasse Camry {}
}exporterespace de noms gué {
exporterclasse Mustang {}
}
}// Création de l'alias
importer tesla = Voiture. Tesla
constante modèleX = nouveau Tesla. ModèleX()
modelX.create() // Modèle X créé
Cet exemple crée un alias pour le Voiture. Tesla espace de noms. Vous pouvez utiliser cet alias pour accéder aux propriétés du Tesla namespace, comme la classe ModelX, plus facilement.
Utilisation d'espaces de noms dans plusieurs fichiers
Pour utiliser un espace de noms dans un autre fichier, vous devez l'importer. L'importation d'espaces de noms est différente de l'importation de variables, de fonctions, de classes, etc. En fonction de votre projet système de modules, vous pouvez les importer en utilisant soit le exiger ou la importer mot-clé.
Cependant, vous ne pouvez importer des espaces de noms qu'à l'aide de la directive triple barre oblique, qui est un commentaire sur une seule ligne contenant une balise XML.
Par exemple:
// main.ts
///
Exemple.foo()
Cet exemple utilise la directive triple barre oblique à l'intérieur d'un main.ts déposer. La directive fait référence à la index.ts fichier, qui contient le Exemple espace de noms. Sans importation, l'espace de noms n'est disponible que dans le même fichier qui le définit.
Après avoir fait référence au index.ts fichier, vous pouvez accéder au Exemple espace de noms et ses membres accessibles au public. Par exemple, vous pouvez appeler le fou méthode sur la Exemple espace de noms.
Une fois que vous utilisez plusieurs fichiers, vous devez vous assurer que TypeScript compile et charge tout le code nécessaire. Vous pouvez le faire en concaténant la sortie du compilateur TypeScript à l'aide de la outFile option. Cela compilera ensuite tous les fichiers d'entrée dans un seul fichier de sortie JavaScript. La syntaxe générale pour exécuter le compilateur comme ceci est :
tsc --outFile
Remplacer avec le nom de votre fichier JavaScript cible. Remplacer avec le nom du fichier TypeScript contenant la directive triple barre oblique.
Par exemple:
tsc --outFile index.js main.ts
Cette commande compilera le contenu du main.ts fichier, ainsi que tous les fichiers référencés par la directive triple barre oblique, dans le index.js déposer.
Vous pouvez également spécifier chaque fichier individuellement :
tsc --outFile
Il est important de noter que la directive triple barre oblique n'est valide que lorsqu'elle est déclarée en haut d'un fichier. Si vous essayez de l'utiliser ailleurs, TypeScript le traitera comme un commentaire normal sur une seule ligne sans signification particulière.
Devriez-vous utiliser des espaces de noms ou des modules?
Bien que les espaces de noms ne soient pas obsolètes, il est souvent recommandé d'organiser et de gérer votre code à l'aide de modules ES6. Les modules sont plus faciles à maintenir et à gérer et vous pouvez les répartir sur plusieurs fichiers.
De plus, vous pouvez spécifier les relations entre les modules en termes d'importations et d'exportations au niveau du fichier. Les espaces de noms ne peuvent pas définir leurs dépendances.
En fin de compte, le choix entre les espaces de noms et les modules dépendra des besoins et des exigences spécifiques de votre projet, car les deux offrent un moyen précieux d'organiser et de gérer le code dans TypeScript.