Подтвердить что ты не робот

Поддерживает ли пространство имен TypeScript?

Как в названии: поддерживает ли TypeScript пространство имен? Если да, то как их использовать?

4b9b3361

Ответ 1

Typescript позволяет определить модули, тесно связанные с тем, что будет в ECMAScript 6. Следующий пример берется из спецификации:

module outer {
    var local = 1;
    export var a = local;
    export module inner {
        export var x = 10;
    }
}

Как вы можете видеть, модули имеют имена и могут быть вложенными. Если вы используете точки в именах модулей, typescript скомпилирует это для вложенных модулей следующим образом:

module A.B.C {
    export var x = 1;
}

Это равно

module A {
    module B {
        module C {
            export var x = 1;
        }
    }
}

Важно также, что если вы повторно используете одно и то же имя модуля в одной программе typescript, код будет принадлежать одному модулю. Следовательно, вы можете использовать вложенные модули для реализации иерархических пространств имен.

Ответ 2

Начиная с версии 1.5, Typescript поддерживает ключевое слово namespace. Пространства имен эквивалентны внутренним модулям.

Из Что нового в Typescript:

До:

module Math {
    export function add(x, y) { ... }
}

После:

namespace Math {
    export function add(x, y) { ... }
}

Для определения внутреннего модуля теперь вы можете использовать как module, так и namespace.

Ответ 3

Вот пример пространства 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();
        }
    }
}

Вы можете узнать больше здесь: http://www.codebelt.com/typescript/javascript-namespacing-with-typescript-internal-modules/

Ответ 4

Не существует ключевого слова "namespace", но внутренние модули (с использованием ключевого слова "module" ) и внешние модули (с использованием ключевого слова "export" ) предлагают аналогичный способ разделить ваш код на логические иерархии.

Ответ 5

False...

module A.B.C {
    export var x = 1;
}

равно

module A {
    export module B {
        export module C {
            export var x = 1;
        }
    }
}

потому что вы можете писать вне модуля A:

var y = A.B.C.x;

Но:

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