Kialakítási szempontok
A kódszervezéshez névtereket vagy modulokat használhat, és mindkettő tartalmazhat kódot és deklarációkat.
Bár a névterek könnyen használhatók egyszerű implementációkhoz, és nem függnek a modulbetöltőktől, a modulok további előnyöket kínálnak, amelyeket a névterek nem. Modulok:
- Deklarálja a függőségeket.
- Jobb kódhasználatot biztosít.
- Erős elkülönítést biztosít.
- Rejtse el a moduldefiníciók belső utasításait, és csak a deklarált összetevőhöz társított metódusokat és paramétereket jelenítse meg.
- Jobb eszköztámogatást biztosít a kötegeléshez.
- A Node.js-alkalmazások névtereinél ajánlott, mert a modulok az alapértelmezettek.
- Meg tudja oldani a felülről lefelé mutató JavaScript-folyamatokkal kapcsolatos problémákat, mert egy külső metódusra vagy osztályra mutató hivatkozás csak metódushívás esetén lesz példányosítva.
Az ECMAScript 2015-től kezdve a modulok a nyelv natív részei, és minden megfelelő motor-implementációnak támogatnia kell. Az új projektek esetében tehát a modulok használata javasolt a kódszervezéshez.
Megjegyzés:
Nem ajánlott egyesíteni a névtereket és a modulokat ugyanabban a projektben.
Az alábbi táblázat összefoglalja és összehasonlítja a modulokat és a névtereket.
Modul | Névtér |
---|---|
A modulok használatával a kódot különálló fájlokba rendezve a funkciók logikai csoportosításához. | A névterek használatával a kódot külön fájlokba rendezi a funkciók logikai csoportosításához. |
A modulok a helyi hatókörükben futnak, nem a globális hatókörben. | A névterek a helyi hatókörükben futnak, nem a globális hatókörben. |
A modulok deklaratívak; a modulok közötti kapcsolatokat az import és az exportálás tekintetében a fájl szintjén kell meghatározni. | A névterek nem deklarálhatják függőségeiket. |
Egy modult egy fájlban lévő kulcsszóval vagy import egy export adott kulcsszóval határozhat meg. A legfelső szintű importálást vagy exportálást tartalmazó fájlok modulnak minősülnek. |
A névteret a namespace fájlban lévő kulcsszóval határozhatja meg. A névtér-utasítások beágyazhatók és több fájlra is kiterjedhetnek. |
Ha a modulon kívül szeretné elérhetővé tenni az egyes modulösszetevőket, használja a kulcsszót export . |
Ha a névtéren kívül szeretné elérhetővé tenni az egyes névtérösszetevőket, használja a kulcsszót export . |
Ha egy másik modul egyik moduljából származó összetevőt szeretne használni, használja a kulcsszót import . |
Ha egy másik TypeScript-fájl egyik névteréből származó összetevőt szeretne használni, adjon hozzá egy utasítást reference a tripla perjel (/// ) szintaxissal. |
Egy modul és annak minden függő fájljának fordításához használja a tsc --module parancsot. |
A névtereket és azok függő fájljait tartalmazó TypeScript-fájlok egyes JavaScript-fájlokba való fordításához használja a tsc parancsot. |
Nem lehet több fájlból álló modulokat egyetlen modulra lefordítani. | A névtereket tartalmazó TypeScript-fájlok egyetlen JavaScript-fájlba való fordításához használja a tsc --outFile parancsot. |
A modulok egy modulbetöltő API használatával importálnak egy másik modult. A modul lefordításakor meg kell adnia az API-t. | A névterek betöltéséhez adja meg a .js fájlneveket (sorrendben) a <script> HTML-oldalon lévő címke használatával. |
A modulokban újra exportálhatja az összetevőket az eredeti nevükkel, vagy átnevezheti őket. | A névterekben nem exportálhatja újra az összetevőket, és nem nevezheti át őket. |