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

голоса
52

Как и в названии: Поддерживает машинопись пространств имен? Если да, то как я могу их использовать?

Задан 05/10/2012 в 01:33
источник пользователем
На других языках...                            


5 ответов

голоса
55

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

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

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

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

Это равно

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

Что также важно, что если вы повторно точно такое же имя модуля в одной программе машинопись, код будет принадлежать одному и тому же модулю. Таким образом, вы можете использовать вложенные модули для реализации hierarchichal пространств имен.

Ответил 05/10/2012 в 09:12
источник пользователем

голоса
28

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

Из Что нового в машинописном :

До:

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

После:

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

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

Ответил 24/07/2015 в 18:01
источник пользователем

голоса
9

Вот пример машинописи пространства имен:

///<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/

Ответил 03/11/2013 в 22:54
источник пользователем

голоса
7

Там нет «пространства имен» ключевого слова, но внутренние модули (с использованием модулем «» ключевого слова) и внешние модули (с помощью «экспорта» ключевого слово) предлагают аналогичный способ разбиения на разделы кода в логические иерархии.

Ответил 05/10/2012 в 01:35
источник пользователем

голоса
3

Ложь...

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

равно

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

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

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
Ответил 21/07/2015 в 11:45
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more