Una collisione di denominazione si verifica quando due o più componenti di codice utilizzano lo stesso nome per una variabile, una funzione o una classe. Sono comuni in grandi progetti in cui molte persone lavorano sulla stessa base di codice. Possono rendere difficile determinare quale componente del codice è responsabile dei bug.
Utilizzando gli spazi dei nomi, puoi organizzare e gestire il tuo codice in modo che i gruppi di componenti correlati siano sotto un identificatore comune. Ciò ridurrà il rischio di conflitti di denominazione.
Creazione di uno spazio dei nomi
Puoi creare spazi dei nomi in TypeScript usando il file spazio dei nomi parola chiave. Seguilo con un identificatore per denominare lo spazio dei nomi e un blocco racchiuso tra parentesi graffe. La sintassi è simile a quella che useresti creare una classe in JavaScript.
Per esempio:
spazio dei nomi Esempio {}
È quindi possibile dichiarare i membri dello spazio dei nomi (variabili, funzioni e classi) all'interno del blocco dello spazio dei nomi:
spazio dei nomi Esempio {
esportarefunzionePippo(): vuoto{
consolare.tronco d'albero("Questa è una funzione all'interno dello spazio dei nomi di esempio");
}esportareclasse Sbarra {
proprietà: corda;costruttore(proprietà: corda) {
Questo.property = proprietà;
}
}
esportarecost bazz = "Questa è una variabile dello spazio dei nomi"
}
Nell'esempio sopra, Pippo, Sbarra, E baz sono membri del Esempio spazio dei nomi. Per impostazione predefinita, puoi accedere solo ai membri di uno spazio dei nomi all'interno dello stesso spazio dei nomi. Usa il esportare parola chiave per rendere ogni membro dello spazio dei nomi accessibile al di fuori di esso.
Puoi accedere a tutti i membri disponibili pubblicamente di uno spazio dei nomi chiamando il nome del membro dello spazio dei nomi utilizzando la notazione con punto:
Esempio.foo(); // Questa è una funzione all'interno dello spazio dei nomi di esempio
cost barra = nuovo Esempio. Sbarra("corda");
consolare.log (bar.proprietà); // corda
consolare.log (Esempio.baz); // Questa è una variabile dello spazio dei nomi
Spazi dei nomi nidificati
TypeScript ti consente di nidificare gli spazi dei nomi all'interno di altri spazi dei nomi per creare una struttura gerarchica per il tuo codice. La nidificazione degli spazi dei nomi può ridurre ulteriormente i rischi di collisioni di denominazione raggruppando gli spazi dei nomi correlati sotto un identificatore comune.
Per esempio:
spazio dei nomi Esempio {
esportarecost proprietà_1 = "Pippo";esportarespazio dei nomi Sbarra {
esportarecost stampaFoo = funzione () {
consolare.log (proprietà_1);
};
}esportarespazio dei nomi Baz {
esportareclasse Pippo {
proprietà: corda;
costruttore(proprietà: corda) {
Questo.property = proprietà;
}
}
}
}
Il blocco di codice precedente fornisce un esempio di uno spazio dei nomi nidificato. IL Esempio namespace è lo spazio dei nomi di primo livello, contenente il Sbarra spazio dei nomi e il Baz spazio dei nomi.
È possibile accedere alle proprietà in uno spazio dei nomi nidificato utilizzando la notazione con punto che segue la struttura gerarchica creata.
Per esempio:
consolare.log (Esempio.proprietà_1); // Pippo
Esempio. Bar.printFoo() // Pippo
cost pippo = nuovo Esempio. Baz. Pippo("esempio")
Questo codice di esempio accede a ciascun membro dello spazio dei nomi tramite lo spazio dei nomi padre. L'accesso diretto a una proprietà, invece che tramite il relativo spazio dei nomi padre, genererebbe un errore:
Esempio.printFoo()
// errore TS2339: la proprietà 'printFoo' non esiste sul tipo 'typeof Esempio'
Sebbene gli spazi dei nomi nidificati possano aiutarti a organizzare il tuo codice, gli spazi dei nomi profondamente annidati possono produrre l'effetto opposto. Gli spazi dei nomi profondamente nidificati rendono il codice più difficile da leggere e mantenere.
Alias dello spazio dei nomi
Un alias dello spazio dei nomi è un nome abbreviato assegnato a un membro dello spazio dei nomi, che ne semplifica il riferimento.
È possibile creare un alias dello spazio dei nomi utilizzando il file importare parola chiave seguita dal nome che si desidera assegnare all'alias. Quindi, assegna il file importare parola chiave e il nome alias di un membro dello spazio dei nomi.
Per esempio:
spazio dei nomi Auto {
esportarespazio dei nomi Tesla {
esportareclasse ModelloX {
creare(): Corda {
ritorno"Modello X creato".
}
}
}esportarespazio dei nomi Toyota {
esportareclasse Camry {}
}esportarespazio dei nomi guado {
esportareclasse Mustang {}
}
}// Creazione dell'alias
importare tesla = automobile. Tesla
cost modelloX = nuovo Tesla. ModelloX()
modelloX.create() // Modello X creato
Questo esempio crea un alias per il file Auto. Tesla spazio dei nomi. È possibile utilizzare questo alias per accedere alle proprietà del file Tesla namespace, come la classe ModelX, più facilmente.
Utilizzo di spazi dei nomi in più file
Per utilizzare uno spazio dei nomi in un file diverso, devi importarlo. L'importazione di spazi dei nomi è diversa dall'importazione di variabili, funzioni, classi, ecc. A seconda del tuo progetto sistema di moduli, puoi importarli utilizzando il file richiedere o il importare parola chiave.
Tuttavia, è possibile importare spazi dei nomi solo utilizzando la direttiva barra tripla, che è un commento a riga singola contenente un tag XML.
Per esempio:
// main.ts
///
Esempio.foo()
Questo esempio utilizza la direttiva tripla barra all'interno di a main.ts file. La direttiva fa riferimento al index.ts file, che contiene il file Esempio spazio dei nomi. Senza l'importazione, lo spazio dei nomi è disponibile solo all'interno dello stesso file che lo definisce.
Dopo aver fatto riferimento al index.ts file, è possibile accedere al file Esempio namespace e i suoi membri pubblicamente disponibili. Ad esempio, puoi chiamare il pippo metodo sul Esempio spazio dei nomi.
Dopo aver utilizzato più file, dovrai assicurarti che TypeScript compili e carichi tutto il codice necessario. Puoi farlo concatenando l'output dal compilatore TypeScript usando il file outFile opzione. Questo compilerà quindi tutti i file di input in un singolo file di output JavaScript. La sintassi generale per eseguire il compilatore in questo modo è:
tsc --outFile
Sostituire con il nome del file JavaScript di destinazione. Sostituire con il nome del file TypeScript contenente la direttiva tripla barra.
Per esempio:
tsc --outFile index.js main.ts
Questo comando compilerà il contenuto del file main.ts file, insieme a tutti i file a cui fa riferimento la direttiva tripla barra, nel formato index.js file.
In alternativa, puoi specificare ciascun file singolarmente:
tsc --outFile
È importante notare che la direttiva tripla barra è valida solo se dichiarata all'inizio di un file. Se provi a usarlo altrove, TypeScript lo tratterà come un normale commento a riga singola senza significato speciale.
Dovresti usare spazi dei nomi o moduli?
Sebbene gli spazi dei nomi non siano obsoleti, è spesso consigliabile organizzare e gestire il codice utilizzando i moduli ES6. I moduli sono più facili da mantenere e gestire e puoi applicarli a più file.
Inoltre, puoi specificare le relazioni tra i moduli in termini di importazioni ed esportazioni a livello di file. Gli spazi dei nomi non possono definire le loro dipendenze.
In definitiva, la scelta tra spazi dei nomi e moduli dipenderà dalle esigenze e dai requisiti specifici del tuo progetto, poiché entrambi offrono un modo prezioso di organizzare e gestire il codice in TypeScript.