Az Önhöz hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk. Olvass tovább.

Elnevezési ütközés akkor következik be, ha két vagy több kódösszetevő ugyanazt a nevet használja egy változóhoz, függvényhez vagy osztályhoz. Gyakoriak a nagy projektekben, ahol sok ember dolgozik ugyanazon a kódbázison. Megnehezíthetik annak meghatározását, hogy melyik kódkomponens felelős a hibákért.

A névterek használatával rendszerezheti és kezelheti a kódot úgy, hogy a kapcsolódó összetevők csoportjai közös azonosító alatt legyenek. Ez csökkenti az elnevezési konfliktusok kockázatát.

Névtér létrehozása

A TypeScriptben névtereket hozhat létre a névtér kulcsszó. Kövesse azt egy azonosítóval a névtér elnevezéséhez, valamint egy kapcsos zárójelekkel körülvett blokkot. A szintaxis hasonló az Ön által használt szintaxishoz hozzon létre egy osztályt JavaScriptben.

Például:

névtér Példa {}

Ezután deklarálhatja a névtér tagjait – változókat, függvényeket és osztályokat – a névtérblokkon belül:

névtér Példa {
exportfunkcióFoo(): üres{
konzol.log("Ez egy függvény a Példa névtérben");
}

exportosztály Rúd {
ingatlan: húr;

konstruktőr(ingatlan: húr) {
ez.property = tulajdon;
}
}

exportconst baz = "Ez egy névtérváltozó"
}

A fenti példában Foo, Rúd, és baz tagjai a Példa névtér. Alapértelmezés szerint csak az ugyanazon a névtéren belüli névtér tagjaihoz férhet hozzá. Használja a export kulcsszóval, hogy a névtér minden tagja elérhető legyen rajta kívül.

A névtér összes nyilvánosan elérhető tagjához hozzáférhet, ha a névtér tagnevét pont jelöléssel hívja:

example.foo(); // Ez egy függvény a Példa névtérben

const bár = új Példa. Rúd("húr");
konzol.log (bar.property); // húr

konzol.log (Példa.baz); // Ez egy névtérváltozó

Névterek egymásba ágyazása

A TypeScript lehetővé teszi, hogy névtereket más névterekbe ágyazzon be, hogy hierarchikus struktúrát hozzon létre a kódhoz. A névterek egymásba ágyazása tovább csökkentheti az elnevezési ütközések kockázatát azáltal, hogy a kapcsolódó névtereket egy közös azonosító alá csoportosítja.

Például:

névtér Példa {
exportconst property_1 = "Fú";

exportnévtér Rúd {
exportconst printFoo = funkció () {
konzol.log (tulajdonság_1);
};
}

exportnévtér Baz {
exportosztály Foo {
ingatlan: húr;

konstruktőr(ingatlan: húr) {
ez.property = tulajdon;
}
}
}
}

A fenti kódblokk példát mutat beágyazott névtérre. A Példa névtér a legfelső szintű névtér, amely tartalmazza a Rúd névtér és a Baz névtér.

A beágyazott névtér tulajdonságait pontjelöléssel érheti el, amely követi az Ön által létrehozott hierarchikus struktúrát.

Például:

konzol.log (Példa.tulajdonság_1); // Foo
Példa. Bar.printFoo() // Foo
const foo = új Példa. Baz. foo("példa")

Ez a példakód a névtér minden tagját a szülő névtéren keresztül éri el. Egy tulajdonság közvetlen elérése, nem a szülő névterén keresztül, hibát okozna:

Példa.printFoo()
// TS2339 hiba: A 'printFoo' tulajdonság nem létezik a 'typeof Example' típuson

Bár az egymásba ágyazott névterek segíthetnek a kód rendszerezésében, a mélyen beágyazott névterek ellenkező hatást válthatnak ki. A mélyen beágyazott névterek megnehezítik a kód olvasását és karbantartását.

Névtér álnevek

A névtér-alias egy névtértagnak adott rövidített név, amely megkönnyíti a hivatkozást.

Létrehozhat egy névtér aliast a import kulcsszó után az aliashoz rendelni kívánt név. Ezután rendelje hozzá a import kulcsszót és az álnevet egy névtértagnak.

Például:

névtér Autó {
exportnévtér Tesla {
exportosztály ModelX {
teremt(): Húr {
Visszatérés"X modell létrehozva".
}
}
}

exportnévtér Toyota {
exportosztály Camry {}
}

exportnévtér Ford {
exportosztály Mustang {}
}
}

// Az álnév létrehozása
import tesla = Autó. Tesla

const modellX = új tesla. ModelX()
modelX.create() // X modell létrehozva

Ez a példa létrehoz egy álnevet a Autó. Tesla névtér. Ezzel az álnévvel elérheti a tulajdonságait Tesla névtér, mint a ModelX osztály, könnyebben.

Névterek használata több fájlban

Ha egy másik fájlban szeretne névteret használni, importálnia kell azt. A névterek importálása eltér a változók, függvények, osztályok stb. importálásától. A projekttől függően modulrendszer, importálhatja őket a igényelnek vagy a import kulcsszó.

A névtereket azonban csak a triple-slash direktíva használatával importálhatja, amely egysoros megjegyzés, amely XML címkét tartalmaz.

Például:

// main.ts

///
example.foo()

Ez a példa a tripla perjel direktívát használja az a-n belül fő.ts fájlt. Az irányelv hivatkozik a index.ts fájlt, amely tartalmazza a Példa névtér. Importálás nélkül a névtér csak ugyanabban a fájlban érhető el, amely meghatározza.

Hivatkozás után a index.ts fájlt, elérheti a Példa névtér és annak nyilvánosan elérhető tagjai. Például felhívhatja a foo módszer a Példa névtér.

Ha több fájlt használ, gondoskodnia kell arról, hogy a TypeScript lefordítsa és betöltse az összes szükséges kódot. Ezt megteheti a TypeScript fordító kimenetének összefűzésével a outFile választási lehetőség. Ez ezután az összes bemeneti fájlt egyetlen JavaScript kimeneti fájlba fordítja. A fordító futtatásának általános szintaxisa a következő:

tsc --outFile 

Cserélje ki a cél JavaScript-fájl nevével. Cserélje ki a tripla perjel direktívát tartalmazó TypeScript fájl nevével.

Például:

tsc --outFile index.js main.ts

Ez a parancs összeállítja a fő.ts fájlt, valamint a tripla perjel direktíva által hivatkozott összes fájlt a index.js fájlt.

Alternatív megoldásként minden fájlt külön-külön is megadhat:

tsc --outFile 

Fontos megjegyezni, hogy a tripla perjel direktíva csak akkor érvényes, ha a fájl tetején van deklarálva. Ha bárhol máshol megpróbálja használni, a TypeScript normál egysoros megjegyzésként kezeli, különösebb jelentés nélkül.

Névtereket vagy modulokat használjon?

Bár a névterek nem elavultak, gyakran javasolt a kód ES6 modulok segítségével történő rendszerezése és kezelése. A modulokat könnyebb karbantartani és kezelni, és több fájlra is kiterjedhet.

Ezenkívül fájlszinten megadhatja a modulok közötti kapcsolatokat az importálás és az exportálás tekintetében. A névterek nem határozhatják meg függőségeiket.

Végső soron a névterek és modulok közötti választás a projekt sajátos igényeitől és követelményeitől függ, mivel mindkettő értékes módot kínál a kódok TypeScript rendszerben való rendszerezésére és kezelésére.