O coliziune de denumire are loc atunci când două sau mai multe componente de cod folosesc același nume pentru o variabilă, funcție sau clasă. Sunt comune în proiecte mari în care mulți oameni lucrează pe aceeași bază de cod. Acestea pot face dificilă determinarea care componentă de cod este responsabilă pentru erori.
Folosind spațiile de nume, vă puteți organiza și gestiona codul astfel încât grupurile de componente asociate să fie sub un identificator comun. Acest lucru va atenua riscul conflictelor de denumire.
Crearea unui spațiu de nume
Puteți crea spații de nume în TypeScript folosind spatiu de nume cuvânt cheie. Urmați-l cu un identificator pentru a denumi spațiul de nume și un bloc închis de acolade. Sintaxa este similară cu cea cu care ați obișnui creați o clasă în JavaScript.
De exemplu:
spatiu de nume Exemplu {}
Apoi puteți declara membri ai spațiului de nume - variabile, funcții și clase - în blocul spațiului de nume:
spatiu de nume Exemplu {
exportfuncţieFoo(): gol{
consolă.Buturuga(„Aceasta este o funcție în interiorul spațiului de nume Exemplu”);
}exportclasă Bar {
proprietate: şir;constructor(proprietate: şir) {
acest.proprietate = proprietate;
}
}
exportconst baz = „Aceasta este o variabilă de spațiu de nume”
}
În exemplul de mai sus, Foo, Bar, și baz sunt membri ai Exemplu spatiu de nume. În mod implicit, puteți accesa doar membrii unui spațiu de nume din același spațiu de nume. Folosește export cuvânt cheie pentru a face fiecare membru al spațiului de nume accesibil în afara acestuia.
Puteți accesa toți membrii disponibili public ai unui spațiu de nume apelând numele membrului spațiului de nume folosind notația cu puncte:
Exemplu.foo(); // Aceasta este o funcție din spațiul de nume Exemplu
const bara = nou Exemplu. Bar("şir");
consolă.log (bar.proprietate); // șir
consolă.log (Exemplu.baz); // Aceasta este o variabilă de spațiu de nume
Imbricarea spațiilor de nume
TypeScript vă permite să imbricați spații de nume în alte spații de nume pentru a crea o structură ierarhică pentru codul dvs. Imbricarea spațiilor de nume poate reduce și mai mult riscurile coliziunilor de denumire prin gruparea spațiilor de nume asociate sub un identificator comun.
De exemplu:
spatiu de nume Exemplu {
exportconst proprietate_1 = "Foo";exportspatiu de nume Bar {
exportconst printFoo = funcţie () {
consolă.log (proprietatea_1);
};
}exportspatiu de nume Baz {
exportclasă Foo {
proprietate: şir;
constructor(proprietate: şir) {
acest.proprietate = proprietate;
}
}
}
}
Blocul de cod de mai sus oferă un exemplu de spațiu de nume imbricat. The Exemplu namespace este spațiul de nume de nivel superior, care conține Bar namespace și Baz spatiu de nume.
Puteți accesa proprietățile dintr-un spațiu de nume imbricat folosind notația cu puncte care urmează structura ierarhică pe care ați creat-o.
De exemplu:
consolă.log (Exemplu.proprietate_1); // Foo
Exemplu. Bar.printFoo() // Foo
const foo = nou Exemplu. Baz. Foo("exemplu")
Acest exemplu de cod accesează fiecare membru al spațiului de nume prin intermediul spațiului de nume părinte. Accesarea unei proprietăți direct, în loc de prin spațiul de nume părinte, ar genera o eroare:
Example.printFoo()
// eroare TS2339: Proprietatea „printFoo” nu există pe tipul „typeof Example”
Deși imbricarea spațiilor de nume vă poate ajuta să vă organizați codul, spațiile de nume imbricate profund pot produce efectul opus. Spațiile de nume profund imbricate fac codul mai greu de citit și de întreținut.
Aliasuri de spațiu de nume
Un alias de spațiu de nume este un nume scurt dat unui membru al spațiului de nume, ceea ce îl face mai ușor de referit.
Puteți crea un alias de spațiu de nume folosind import cuvânt cheie urmat de numele pe care doriți să-l atribuiți aliasului. Apoi, atribuiți import cuvântul cheie și numele alias-ului unui membru al spațiului de nume.
De exemplu:
spatiu de nume Mașină {
exportspatiu de nume Tesla {
exportclasă ModelX {
crea(): Şir {
întoarcere`Modelul X creat`
}
}
}exportspatiu de nume Toyota {
exportclasă Camry {}
}exportspatiu de nume Ford {
exportclasă Mustang {}
}
}// Crearea aliasului
import tesla = mașină. Tesla
const modelX = nou tesla. ModelX()
modelX.create() // Model X creat
Acest exemplu creează un alias pentru Mașină. Tesla spatiu de nume. Puteți folosi acest alias pentru a accesa proprietățile Tesla namespace, cum ar fi clasa ModelX, mai ușor.
Utilizarea spațiilor de nume în mai multe fișiere
Pentru a utiliza un spațiu de nume într-un fișier diferit, trebuie să îl importați. Importarea spațiilor de nume este diferită de importarea variabilelor, funcțiilor, claselor etc. În funcție de proiectul tău sistem de module, le puteți importa folosind fie cere sau import cuvânt cheie.
Cu toate acestea, puteți importa spații de nume numai folosind directiva triple-slash, care este un comentariu pe o singură linie care conține o etichetă XML.
De exemplu:
// main.ts
///
Exemplu.foo()
Acest exemplu folosește directiva triplă oblică în interiorul a principale.ts fişier. Directiva face referire la index.ts fișier, care conține fișierul Exemplu spatiu de nume. Fără importare, spațiul de nume este disponibil numai în același fișier care îl definește.
După ce face referire la index.ts fișier, puteți accesa fișierul Exemplu namespace și membrii săi disponibili public. De exemplu, puteți apela foo metoda pe Exemplu spatiu de nume.
Odată ce utilizați mai multe fișiere, va trebui să vă asigurați că TypeScript compilează și încarcă tot codul necesar. Puteți face acest lucru prin concatenarea rezultatelor din compilatorul TypeScript folosind outFile opțiune. Acest lucru va compila apoi toate fișierele de intrare într-un singur fișier de ieșire JavaScript. Sintaxa generală pentru rularea compilatorului astfel este:
tsc --outFile
A inlocui cu numele fișierului JavaScript țintă. A inlocui cu numele fișierului TypeScript care conține directiva triple-slash.
De exemplu:
tsc --outFile index.js main.ts
Această comandă va compila conținutul fișierului principale.ts fișier, împreună cu toate fișierele la care se face referire de directiva triple-slash, în index.js fişier.
Alternativ, puteți specifica fiecare fișier individual:
tsc --outFile
Este important de reținut că directiva triple-slash este valabilă numai atunci când este declarată în partea de sus a unui fișier. Dacă încercați să-l utilizați în altă parte, TypeScript îl va trata ca un comentariu obișnuit pe o singură linie, fără o semnificație specială.
Ar trebui să utilizați spații de nume sau module?
Deși spațiile de nume nu sunt depreciate, organizarea și gestionarea codului dvs. folosind module ES6 este adesea recomandată. Modulele sunt mai ușor de întreținut și gestionat și le puteți extinde pe mai multe fișiere.
În plus, puteți specifica relațiile dintre module în ceea ce privește importurile și exporturile la nivel de fișier. Spațiile de nume nu își pot defini dependențele.
În cele din urmă, alegerea dintre spațiile de nume și module va depinde de nevoile și cerințele specifice ale proiectului dvs., deoarece ambele oferă o modalitate valoroasă de organizare și gestionare a codului în TypeScript.