Gyakorlat – Kód rendszerezése egyetlen fájlnévtér használatával
A névtereket egyetlen TypeScript-fájlban vagy több TypeScript-fájlban is implementálhatja.
Megjegyzés:
Többfájlos névterek implementálásához IDE-t, például Visual Studio Code-ot kell használnia. Ezt a TypeScript-játszótéren nem lehet megtenni.
Hajtsa végre az egyetlen fájlnévtér definiálásához szükséges lépéseket:
Nyisson meg egy új Visual Studio Code-munkaterületet.
Hozzon létre egy module08_exercise.ts nevű új fájlt.
Adjon meg egy új névteret a
namespace
kulcsszóval, majd a névtér nevével. Egyetlen TypeScript-fájlban tetszőleges számú névteret definiálhat. A fájl tetején adjon meg két névteretGreetings
GreetingsWithLength
és .namespace Greetings { } namespace GreetingsWithLength { }
Mostantól definiálhat függvényeket és osztályokat a névtérdefiníción belül. A névtérben definiált összes összetevő hatóköre a névtérre terjed ki, és eltávolítja a globális hatókörből. Adjon hozzá egy új függvényt
returnGreeting
aGreetings
névtérhez. Ez a függvény egy paraméter értékét adja vissza a konzolnak.namespace Greetings { function returnGreeting (greeting: string) { console.log(`The message from namespace Greetings is ${greeting}.`); } }
Adjon hozzá két új függvényt,
returnGreeting
ésgetLength
adja hozzá aGreetingsWithLength
névteret. AreturnGreeting
függvény a segédfüggvénygetLength
használatával határozza meg a üdvözlés hosszát, mielőtt visszaküldené az üzenetet a konzolra.namespace GreetingsWithLength { function returnGreeting (greeting: string) { let greetingLength = getLength(greeting); console.log(`The message from namespace GreetingsWithLength is ${greeting}. It is ${greetingLength} characters long.`); } function getLength(message: string): number { return message.length } }
Ha elérhetővé szeretne tenni egy függvényt vagy osztályt a névtéren kívüli kódhoz, adja hozzá a kulcsszót a
export
neve elé. Ha kihagyja a kulcsszótexport
, az összetevő csak a névtérben érhető el. Ezt akkor teheti meg, ha olyan összetevőket határoz meg, amelyeknek csak a névtér más összetevői számára legyenek közvetlenül elérhetők. Adja hozzá aexport
kulcsszót areturnGreeting
függvényhez mindkét névtérben. AgetLength
függvény nem lehet elérhető aGreetingsWithLength
névtéren kívül, ezért hagyja ki a kulcsszótexport
.namespace Greetings { export function returnGreeting (greeting: string) { console.log(`The message from namespace Greetings is ${greeting}.`); } } namespace GreetingsWithLength { export function returnGreeting (greeting: string) { let greetingLength = getLength(greeting); console.log(`The message from namespace GreetingsWithLength is ${greeting}. It is ${greetingLength} characters long.`); } function getLength(message: string): number { return message.length } }
Ha osztályt vagy függvényt szeretne használni egy névtérben, előtagként adja meg az összetevő nevét a névtér nevével. Próbálja meg meghívni a függvényt
returnGreeting
a névtér megadása nélkül. Ez hibát ad vissza, mert mindkétreturnGreeting
függvény hatókörön kívül esik a globális névtérben. Most próbálja meg az előtagotGreetings
vagyGreetingsWithLength
a függvénytreturnGreeting
. Ez hozzáférést biztosít a függvényhez az egyes névtereken belül.returnGreeting('Hello'); // Returns error Greetings.returnGreeting('Bonjour'); // OK GreetingsWithLength.returnGreeting('Hola'); // OK
Kód rendszerezése beágyazott névterek használatával
Névtereket is beágyazhat névterekbe, így még több lehetőséget biztosít a kód rendszerezésére.
Folytassa a munkát a kódszerkesztőben.
Hozzon létre egy új névteret,
AllGreetings
és helyezze át aGreetings
korábban létrehozott névtereketGreetingsWithLength
. Adja hozzá a kulcsszótexport
mindkét névtérnév elé. Ez lehetővé teszi, hogy a névtér a névtéren kívülAllGreetings
is elérhető legyen.namespace AllGreetings { export namespace Greetings { export function returnGreeting (greeting: string) { console.log(`The message from namespace Greetings is ${greeting}.`); } } export namespace GreetingsWithLength { export function returnGreeting (greeting: string) { let greetingLength = getLength(greeting); console.log(`The message from namespace GreetingsWithLength is ${greeting}. It is ${greetingLength} characters long.`); } function getLength(message: string): number { return message.length } } }
A függvények meghívásához először írja be a legkülső névtér nevét,
AllGreetings
egy pontot, majd a következő szintet a névtérhierarchiában,Greetings
vagyGreetingsWithLength
. Folytassa a hierarchiát, amíg el nem éri a függvény nevét.AllGreetings.Greetings.returnGreeting('Bonjour'); // OK AllGreetings.GreetingsWithLength.returnGreeting('Hola'); // OK
Névtér aliasának definiálása
A TypeScript a beágyazott névterek könnyen navigálható hierarchiáját hozza létre. Mivel azonban a beágyazott névterek összetettebbé válnak, érdemes lehet egy aliast létrehozni a kód lerövidítéséhez és egyszerűsítéséhez. Ehhez használja a kulcsszót import
.
Folytassa a munkát a kódszerkesztőben.
Type
import greet = AllGreetings.Greetings
. Ez egy új aliastgreet
határoz meg, amely a . nevet jelöliAllGreetings.Greetings
. Mostantól használhatjagreet
AllGreetings.Greetings
a kód helyett.import greet = AllGreetings.Greetings; greet.returnGreeting('Bonjour');
Egyetlen fájlnévterek összeállítása
Egyetlen fájlnévteret ugyanúgy fordít le, mint bármely más TypeScript-fájlt. Mivel a névterek csak TypeScript-szerkezetek, a rendszer eltávolítja őket az eredményül kapott JavaScript-kódból, és változókká alakítja őket, amelyek szükség szerint beágyazódnak a névtérszerű objektumok létrehozásához.