web-dev-qa-db-fra.com

TypeScript prend-il en charge l'espace de noms?

Comme dans le titre: TypeScript prend-il en charge les espaces de noms? Si oui, comment les utiliser?

52
fletchsod

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.

55
Valentin

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.

28
Nikola Prokopić

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/

9
codeBelt

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.

7
Ryan Cavanaugh

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
3
Yann