Comme dans le titre: TypeScript prend-il en charge les espaces de noms? Si oui, comment les utiliser?
TypeScript permet de définir modules étroitement liés à ce qui sera dans ECMAScript 6. L'exemple suivant est tiré de la spécification:
module outer {
var local = 1;
export var a = local;
export module inner {
export var x = 10;
}
}
Comme vous pouvez le voir, les modules ont des noms et peuvent être imbriqués. Si vous utilisez des points dans les noms de modules, TypeScript les compilera comme suit pour les modules imbriqués:
module A.B.C {
export var x = 1;
}
C'est égal à
module A {
module B {
module C {
export var x = 1;
}
}
}
Ce qui est également important, c'est que si vous réutilisez exactement le même nom de module dans un programme TypeScript, le code appartiendra au même module. Par conséquent, vous pouvez utiliser des modules imbriqués pour implémenter des espaces de noms hiérarchiques.
Depuis la version 1.5, TypeScript prend en charge le mot clé namespace
. Les espaces de noms sont équivalents aux modules internes.
De Quoi de neuf dans TypeScript :
Avant:
module Math { export function add(x, y) { ... } }
Après:
namespace Math { export function add(x, y) { ... } }
Pour définir un module interne, vous pouvez maintenant utiliser à la fois module
et namespace
.
Voici un exemple d'espace de noms TypeScript:
///<reference path='AnotherNamespace/ClassOne.ts'/>
///<reference path='AnotherNamespace/ClassTwo.ts'/>
module MyNamespace
{
import ClassOne = AnotherNamespace.ClassOne;
import ClassTwo = AnotherNamespace.ClassTwo;
export class Main
{
private _classOne:ClassOne;
private _classTwo:ClassTwo;
constructor()
{
this._classOne = new ClassOne();
this._classTwo = new ClassTwo();
}
}
}
Vous pouvez en savoir plus ici: http://www.codebelt.com/TypeScript/javascript-namespacing-with-TypeScript-internal-modules/
Il n'y a pas de mot-clé "namespace", mais les modules internes (en utilisant le mot-clé "module") et les modules externes (en utilisant le mot-clé "export") offrent un moyen similaire de partitionner votre code en hiérarchies logiques.
Faux...
module A.B.C {
export var x = 1;
}
est égal à
module A {
export module B {
export module C {
export var x = 1;
}
}
}
car vous pouvez écrire en dehors du module A:
var y = A.B.C.x;
Mais :
module A {
module B {
module C {
export var x = 1;
}
var y = C.x; // OK
}
//var y = B.C.x; // Invalid
}
//var y = A.B.C.x; // Invalid