Kolízia názvov nastane, keď dva alebo viac komponentov kódu používa rovnaký názov pre premennú, funkciu alebo triedu. Sú bežné vo veľkých projektoch, kde veľa ľudí pracuje na rovnakej kódovej základni. Môžu sťažiť určenie, ktorý komponent kódu je zodpovedný za chyby.
Pomocou menných priestorov môžete organizovať a spravovať svoj kód tak, aby skupiny súvisiacich komponentov boli pod spoločným identifikátorom. Tým sa zníži riziko konfliktov pomenovaní.
Vytvorenie priestoru názvov
Menné priestory môžete vytvoriť v TypeScript pomocou menný priestor kľúčové slovo. Nasledujte ho s identifikátorom na pomenovanie menného priestoru a bloku uzavretého zloženými zátvorkami. Syntax je podobná tej, ktorú by ste použili vytvoriť triedu v JavaScripte.
Napríklad:
menný priestor Príklad {}
Potom môžete deklarovať členov menného priestoru – premenné, funkcie a triedy – v rámci bloku menného priestoru:
menný priestor Príklad {
exportfunkciuFoo(): neplatné{
konzoly.log("Toto je funkcia vo vnútri vzorového menného priestoru");
}exporttrieda Pruh {
nehnuteľnosť: reťazec;konštruktér(nehnuteľnosť: reťazec) {
toto.majetok = majetok;
}
}
exportkonšt baz = "Toto je premenná priestoru názvov"
}
Vo vyššie uvedenom príklade Foo, Bar, a baz sú členmi Príklad menný priestor. V predvolenom nastavení máte prístup len k členom menného priestoru v rámci toho istého menného priestoru. Použi export kľúčové slovo, aby bol každý člen menného priestoru prístupný mimo neho.
Ku všetkým verejne dostupným členom menného priestoru môžete pristupovať tak, že zavoláte meno člena menného priestoru pomocou bodkovej notácie:
Príklad.foo(); // Toto je funkcia v mennom priestore Príklad
konšt bar = Nový Príklad. Bar("reťazec");
konzoly.log (bar.property); // reťazec
konzoly.log (Example.baz); // Toto je premenná priestoru názvov
Vnorené priestory názvov
TypeScript vám umožňuje vkladať menné priestory do iných menných priestorov, aby ste vytvorili hierarchickú štruktúru pre váš kód. Vnorené priestory názvov môžu ďalej znížiť riziká kolízií názvov zoskupením súvisiacich priestorov názvov pod spoločným identifikátorom.
Napríklad:
menný priestor Príklad {
exportkonšt vlastnosť_1 = "Foo";exportmenný priestor Pruh {
exportkonšt printFoo = funkciu () {
konzoly.log (vlastnosť_1);
};
}exportmenný priestor Baz {
exporttrieda Foo {
nehnuteľnosť: reťazec;
konštruktér(nehnuteľnosť: reťazec) {
toto.majetok = majetok;
}
}
}
}
Vyššie uvedený blok kódu poskytuje príklad vnoreného priestoru názvov. The Príklad namespace je menný priestor najvyššej úrovne, ktorý obsahuje Bar menný priestor a Baz menný priestor.
K vlastnostiam vo vnorenom mennom priestore môžete pristupovať pomocou bodkovej notácie, ktorá sleduje hierarchickú štruktúru, ktorú ste vytvorili.
Napríklad:
konzoly.log (Príklad.vlastnosť_1); // Foo
Príklad. Bar.printFoo() // Foo
konšt foo = Nový Príklad. Baz. Foo("príklad")
Tento vzorový kód pristupuje ku každému členovi menného priestoru cez nadradený menný priestor. Priamy prístup k vlastnosti namiesto nadradeného menného priestoru by spôsobil chybu:
Príklad.printFoo()
// chyba TS2339: Vlastnosť 'printFoo' neexistuje na type 'typeof Example'
Hoci vnorené priestory názvov vám môžu pomôcť zorganizovať váš kód, hlboko vnorené priestory názvov môžu vyvolať opačný efekt. Hlboko vnorené menné priestory sťažujú čítanie a údržbu vášho kódu.
Aliasy menného priestoru
Alias priestoru názvov je skrátený názov daný členovi priestoru názvov, čo uľahčuje odkazovanie.
Alias menného priestoru môžete vytvoriť pomocou importovať kľúčové slovo, za ktorým nasleduje názov, ktorý chcete priradiť k aliasu. Potom priraďte importovať kľúčové slovo a názov aliasu člena menného priestoru.
Napríklad:
menný priestor Auto {
exportmenný priestor Tesla {
exporttrieda ModelX {
vytvoriť (): Reťazec {
vrátiť„Vytvorený model X“.
}
}
}exportmenný priestor Toyota {
exporttrieda Camry {}
}exportmenný priestor Ford {
exporttrieda Mustang {}
}
}// Vytvorenie aliasu
importovať Tesla = Auto. Tesla
konšt modelX = Nový tesla. ModelX()
modelX.create() // Model X vytvorený
Tento príklad vytvorí alias pre Auto. Tesla menný priestor. Tento alias môžete použiť na prístup k vlastnostiam súboru Tesla menný priestor, ako je trieda ModelX, jednoduchšie.
Používanie priestorov názvov vo viacerých súboroch
Ak chcete použiť menný priestor v inom súbore, musíte ho importovať. Import menných priestorov sa líši od importu premenných, funkcií, tried atď. V závislosti od vášho projektu modulový systém, môžete ich importovať pomocou buď vyžadovať alebo importovať kľúčové slovo.
Menné priestory však môžete importovať iba pomocou direktívy s tromi lomkami, čo je jednoriadkový komentár obsahujúci značku XML.
Napríklad:
// main.ts
///
Príklad.foo()
Tento príklad používa direktívu troch lomiek v a main.ts súbor. Smernica sa odvoláva na index.ts súbor, ktorý obsahuje Príklad menný priestor. Bez importu je priestor názvov dostupný iba v rámci toho istého súboru, ktorý ho definuje.
Po odkaze na index.ts súbor, máte prístup k Príklad menného priestoru a jeho verejne dostupných členov. Môžete napríklad zavolať na foo metóda na Príklad menný priestor.
Keď použijete viacero súborov, budete musieť zabezpečiť, aby TypeScript skompiloval a načítal všetok potrebný kód. Môžete to urobiť zreťazením výstupu z kompilátora TypeScript pomocou outFile možnosť. To potom skompiluje všetky vstupné súbory do jedného výstupného súboru JavaScript. Všeobecná syntax pre spustenie kompilátora takto:
tsc --outFile
Nahradiť s názvom vášho cieľového súboru JavaScript. Nahradiť s názvom súboru TypeScript obsahujúceho direktívu troch lomiek.
Napríklad:
tsc --outFile index.js main.ts
Tento príkaz skompiluje obsah súboru main.ts spolu so všetkými súbormi, na ktoré odkazuje direktíva s tromi lomkami, do súboru index.js súbor.
Prípadne môžete zadať každý súbor jednotlivo:
tsc --outFile
Je dôležité poznamenať, že smernica s tromi lomkami je platná len vtedy, keď je deklarovaná v hornej časti súboru. Ak sa ho pokúsite použiť kdekoľvek inde, TypeScript ho bude považovať za bežný jednoriadkový komentár bez špeciálneho významu.
Mali by ste používať menné priestory alebo moduly?
Hoci menné priestory nie sú zastarané, často sa odporúča organizovať a spravovať váš kód pomocou modulov ES6. Moduly sa ľahšie udržiavajú a spravujú a môžete ich zaradiť do viacerých súborov.
Okrem toho môžete určiť vzťahy medzi modulmi z hľadiska importov a exportov na úrovni súboru. Priestory názvov nemôžu definovať svoje závislosti.
V konečnom dôsledku bude výber medzi mennými priestormi a modulmi závisieť od konkrétnych potrieb a požiadaviek vášho projektu, pretože oba ponúkajú cenný spôsob organizácie a správy kódu v TypeScript.