Читатели като вас помагат в подкрепа на MUO. Когато правите покупка чрез връзки на нашия сайт, ние може да спечелим комисионна за партньор. Прочетете още.

Сблъсък при именуване възниква, когато два или повече кодови компонента използват едно и също име за променлива, функция или клас. Те са често срещани в големи проекти, където много хора работят върху една и съща кодова база. Те могат да затруднят определянето кой компонент на кода е отговорен за грешки.

Използвайки пространства от имена, можете да организирате и управлявате своя код, така че групите от свързани компоненти да са под общ идентификатор. Това ще намали риска от конфликти при именуване.

Създаване на пространство от имена

Можете да създавате пространства от имена в TypeScript, като използвате пространство от имена ключова дума. Следвайте го с идентификатор за наименуване на пространството от имена и блок, ограден с къдрави скоби. Синтаксисът е подобен на този, който бихте използвали създайте клас в JavaScript.

Например:

пространство от имена Пример {}
instagram viewer

След това можете да декларирате членове на пространството от имена – променливи, функции и класове – в рамките на блока от пространство от имена:

пространство от имена Пример {
износфункцияФу(): невалиден{
конзола.log(„Това е функция в пространството на имената на примера“);
}

износклас лента {
Имот: низ;

конструктор(Имот: низ) {
това.property = собственост;
}
}

износконст база = „Това е променлива на пространство от имена“
}

В примера по-горе, Фу, Бар, и баз са членове на Пример пространство от имена. По подразбиране можете да осъществявате достъп само до членовете на пространство от имена вътре в същото пространство от имена. Използвай износ ключова дума, за да направи всеки член на пространството от имена достъпен извън него.

Можете да получите достъп до всички публично достъпни членове на пространство от имена, като извикате името на члена на пространството от имена, като използвате нотация с точка:

Пример.foo(); // Това е функция в пространството на имената на примера

конст бар = нов Пример. бар("низ");
конзола.log (bar.property); // низ

конзола.log (Example.baz); // Това е променлива на пространство от имена

Вложени пространства от имена

TypeScript ви позволява да влагате пространства от имена в други пространства от имена, за да създадете йерархична структура за вашия код. Вложените пространства от имена могат допълнително да намалят рисковете от сблъсъци при именуване чрез групиране на свързани пространства от имена под общ идентификатор.

Например:

пространство от имена Пример {
износконст свойство_1 = "фу";

износпространство от имена лента {
износконст printFoo = функция () {
конзола.log (свойство_1);
};
}

износпространство от имена Баз {
износклас Фу {
Имот: низ;

конструктор(Имот: низ) {
това.property = собственост;
}
}
}
}

Кодовият блок по-горе предоставя пример за вложено пространство от имена. The Пример namespace е пространството от имена от най-високо ниво, съдържащо Бар пространство от имена и Баз пространство от имена.

Можете да получите достъп до свойствата във вложено пространство от имена, като използвате нотация с точка, която следва създадената от вас йерархична структура.

Например:

конзола.log (Example.property_1); // Фу
Пример. Bar.printFoo() // Фу
конст фу = нов Пример. Баз. Фу("пример")

Този примерен код осъществява достъп до всеки член на пространството от имена чрез родителското пространство от имена. Директният достъп до свойство, вместо през неговото родителско пространство от имена, би извел грешка:

Example.printFoo()
// грешка TS2339: Свойството 'printFoo' не съществува в тип 'typeof Пример'

Въпреки че вложените пространства от имена могат да ви помогнат да организирате кода си, дълбоко вложените пространства от имена могат да доведат до обратния ефект. Дълбоко вложените пространства от имена правят вашия код по-труден за четене и поддръжка.

Псевдоними на пространство от имена

Псевдонимът на пространството от имена е съкратено име, дадено на член на пространство от имена, което улеснява справянето с него.

Можете да създадете псевдоним на пространство от имена, като използвате импортиране ключова дума, последвана от името, което искате да присвоите на псевдонима. След това задайте импортиране ключова дума и псевдоним на член на пространство от имена.

Например:

пространство от имена Кола {
износпространство от имена Тесла {
износклас ModelX {
създайте (): низ {
връщане„Създаден модел X“.
}
}
}

износпространство от имена Тойота {
износклас Camry {}
}

износпространство от имена Ford {
износклас Мустанг {}
}
}

// Създаване на псевдоним
импортиране tesla = Кола. Тесла

конст модел X = нов тесла. ModelX()
modelX.create() // Създаден модел X

Този пример създава псевдоним за Кола. Тесла пространство от имена. Можете да използвате този псевдоним за достъп до свойствата на Тесла пространство от имена, като класа ModelX, по-лесно.

Използване на пространства от имена в множество файлове

За да използвате пространство от имена в различен файл, трябва да го импортирате. Импортирането на пространства от имена е различно от импортирането на променливи, функции, класове и т.н. В зависимост от вашия проект модулна система, можете да ги импортирате с помощта на изискват или импортиране ключова дума.

Можете обаче да импортирате пространства от имена само с помощта на директивата с тройна наклонена черта, която е едноредов коментар, съдържащ XML таг.

Например:

// main.ts

///
Example.foo()

Този пример използва директивата за тройна наклонена черта вътре в a main.ts файл. Директивата препраща към index.ts файл, който съдържа Пример пространство от имена. Без импортиране пространството от имена е достъпно само в рамките на същия файл, който го дефинира.

След позоваване на index.ts файл, можете да получите достъп до Пример пространство от имена и неговите публично достъпни членове. Например, можете да се обадите на Фу метод на Пример пространство от имена.

След като използвате няколко файла, ще трябва да се уверите, че TypeScript компилира и зарежда целия необходим код. Можете да направите това, като свържете изхода от компилатора на TypeScript, като използвате outFile опция. Това ще компилира всички входни файлове в един изходен файл на JavaScript. Общият синтаксис за стартиране на компилатора по този начин е:

tsc --изходен файл 

Сменете с името на вашия целеви JavaScript файл. Сменете с името на TypeScript файла, съдържащ директивата с тройна наклонена черта.

Например:

tsc --outFile index.js main.ts

Тази команда ще компилира съдържанието на main.ts файл, заедно с всички файлове, посочени от директивата с тройна наклонена черта, в index.js файл.

Като алтернатива можете да посочите всеки файл поотделно:

tsc --изходен файл 

Важно е да се отбележи, че директивата с тройна наклонена черта е валидна само когато е декларирана в горната част на файл. Ако се опитате да го използвате някъде другаде, TypeScript ще го третира като обикновен едноредов коментар без специално значение.

Трябва ли да използвате пространства от имена или модули?

Въпреки че пространствата от имена не са отхвърлени, организирането и управлението на вашия код с помощта на ES6 модули често се препоръчва. Модулите са по-лесни за поддръжка и управление и можете да ги обхващате в множество файлове.

Освен това можете да укажете връзките между модулите по отношение на импортиране и експортиране на ниво файл. Пространствата от имена не могат да дефинират своите зависимости.

В крайна сметка изборът между пространства от имена и модули ще зависи от специфичните нужди и изисквания на вашия проект, тъй като и двете предлагат ценен начин за организиране и управление на код в TypeScript.