Namespaces

Простори імен надають вам зручний синтаксис навколо загального шаблону, який використовується в JavaScript:

(function(something) {

    something.foo = 123;

})(something || (something = {}))

В основному something || (something = {}) дозволяє анонімній функції function(something) {} add stuff to an existing object (something) або start a new object then add stuff to that object (|| (something = {})). Це означає, що ви можете мати два таких блоки, розділені деякою межею виконання:

(function(something) {

    something.foo = 123;

})(something || (something = {}))

console.log(something); // {foo:123}

(function(something) {

    something.bar = 456;

})(something || (something = {}))

console.log(something); // {foo:123, bar:456}

Це зазвичай використовується в JavaScript, щоб переконатися, що матеріал не просочується в глобальний простір імен. З модулями на основі файлів вам не потрібно турбуватися про це, але шаблон все ще корисний для logical grouping купи функцій. Тому TypeScript надає ключове слово namespace для групування, наприклад:

namespace Utility {
    export function log(msg) {
        console.log(msg);
    }
    export function error(msg) {
        console.error(msg);
    }
}

// usage
Utility.log('Call me');
Utility.error('maybe!');

Ключове слово namespace генерує той самий JavaScript, який ми бачили раніше:

(function (Utility) {

// Add stuff to Utility

})(Utility || (Utility = {}));

Варто зауважити, що простори імен можуть бути вкладеними, тому ви можете робити такі речі, як namespace Utility.Messaging, щоб вкладати простір імен Messaging у Utility.

Для більшості проектів ми рекомендуємо використовувати зовнішні модулі та namespace для швидких демонстрацій і перенесення старого коду JavaScript.

Last updated