Do trka pri poimenovanju pride, ko dve ali več komponent kode uporabljata isto ime za spremenljivko, funkcijo ali razred. Pogosti so pri velikih projektih, kjer veliko ljudi dela na isti kodni bazi. Lahko otežijo ugotavljanje, katera komponenta kode je odgovorna za napake.
Z uporabo imenskih prostorov lahko organizirate in upravljate svojo kodo, tako da so skupine povezanih komponent pod skupnim identifikatorjem. To bo zmanjšalo tveganje sporov pri poimenovanju.
Ustvarjanje imenskega prostora
V TypeScriptu lahko ustvarite imenske prostore z uporabo imenski prostor ključna beseda. Sledi mu identifikator za poimenovanje imenskega prostora in blok, obdan z zavitimi oklepaji. Sintaksa je podobna tisti, ki bi jo uporabljali ustvarite razred v JavaScriptu.
Na primer:
imenski prostor Primer {}
Nato lahko deklarirate člane imenskega prostora – spremenljivke, funkcije in razrede – znotraj bloka imenskega prostora:
imenski prostor Primer {
izvozfunkcijoFoo(): praznina{
konzola.log("To je funkcija znotraj imenskega prostora Primer");
}izvozrazred Bar {
lastnina: vrvica;konstruktor(lastnina: vrvica) {
to.property = lastnina;
}
}
izvozkonst baz = "To je spremenljivka imenskega prostora"
}
V zgornjem primeru Foo, Bar, in baz so člani Primer imenski prostor. Privzeto lahko dostopate samo do članov imenskega prostora znotraj tega istega imenskega prostora. Uporabi izvoz ključno besedo, da bo vsak član imenskega prostora dostopen zunaj njega.
Do vseh javno dostopnih članov imenskega prostora lahko dostopate tako, da pokličete ime člana imenskega prostora z zapisom s pikami:
Primer.foo(); // To je funkcija znotraj imenskega prostora Primer
konst bar = novo Primer. Bar("vrvica");
konzola.log (bar.property); // vrvica
konzola.log (Example.baz); // To je spremenljivka imenskega prostora
Gnezdenje imenskih prostorov
TypeScript vam omogoča, da imenske prostore ugnezdite v druge imenske prostore, da ustvarite hierarhično strukturo za svojo kodo. Gnezdenje imenskih prostorov lahko dodatno zmanjša tveganje za navzkrižje poimenovanja z združevanjem povezanih imenskih prostorov pod skupnim identifikatorjem.
Na primer:
imenski prostor Primer {
izvozkonst lastnost_1 = "fuj";izvozimenski prostor Bar {
izvozkonst printFoo = funkcijo () {
konzola.log (lastnost_1);
};
}izvozimenski prostor Baz {
izvozrazred Foo {
lastnina: vrvica;
konstruktor(lastnina: vrvica) {
to.property = lastnina;
}
}
}
}
Zgornji blok kode nudi primer ugnezdenega imenskega prostora. The Primer imenski prostor je imenski prostor najvišje ravni, ki vsebuje Bar imenski prostor in Baz imenski prostor.
Do lastnosti v ugnezdenem imenskem prostoru lahko dostopate z zapisom s pikami, ki sledi hierarhični strukturi, ki ste jo ustvarili.
Na primer:
konzola.log (Example.property_1); // Foo
Primer. Bar.printFoo() // Foo
konst foo = novo Primer. Baz. Foo("primer")
Ta primer kode dostopa do vsakega člana imenskega prostora prek nadrejenega imenskega prostora. Neposredni dostop do lastnosti, namesto prek njenega nadrejenega imenskega prostora, bi povzročil napako:
Primer.printFoo()
// napaka TS2339: Lastnost 'printFoo' ne obstaja v vrsti 'typeof Primer'
Čeprav vam lahko gnezdenje imenskih prostorov pomaga organizirati kodo, lahko globoko ugnezdeni imenski prostori povzročijo nasprotni učinek. Zaradi globoko ugnezdenih imenskih prostorov je kodo težje brati in vzdrževati.
Vzdevki imenskega prostora
Vzdevek imenskega prostora je skrajšano ime, dano članu imenskega prostora, ki olajša sklicevanje.
Vzdevek imenskega prostora lahko ustvarite z uporabo uvoz ključna beseda, ki ji sledi ime, ki ga želite dodeliti vzdevku. Nato dodelite uvoz ključno besedo in ime vzdevka za člana imenskega prostora.
Na primer:
imenski prostor avto {
izvozimenski prostor Tesla {
izvozrazred ModelX {
ustvari(): Vrvica {
vrnitev`Ustvarjen model X`
}
}
}izvozimenski prostor Toyota {
izvozrazred Camry {}
}izvozimenski prostor Ford {
izvozrazred Mustang {}
}
}// Ustvarjanje vzdevka
uvoz tesla = avto. Tesla
konst modelX = novo tesla. ModelX()
modelX.create() // Model X ustvarjen
Ta primer ustvari vzdevek za avto. Tesla imenski prostor. Ta vzdevek lahko uporabite za dostop do lastnosti Tesla imenski prostor, kot je razred ModelX, lažje.
Uporaba imenskih prostorov v več datotekah
Če želite uporabiti imenski prostor v drugi datoteki, ga morate uvoziti. Uvažanje imenskih prostorov se razlikuje od uvažanja spremenljivk, funkcij, razredov itd. Odvisno od vašega projekta modulski sistem, jih lahko uvozite z uporabo zahtevati ali uvoz ključna beseda.
Vendar pa lahko imenske prostore uvozite le z uporabo direktive s trojno poševnico, ki je enovrstični komentar, ki vsebuje oznako XML.
Na primer:
// main.ts
///
Primer.foo()
Ta primer uporablja direktivo s trojno poševnico znotraj a main.ts mapa. Direktiva se sklicuje na index.ts datoteko, ki vsebuje Primer imenski prostor. Brez uvoza je imenski prostor na voljo le znotraj iste datoteke, ki ga definira.
Po sklicevanju na index.ts datoteko, lahko dostopate do Primer imenski prostor in njegovi javno dostopni člani. Na primer, lahko pokličete foo metoda na Primer imenski prostor.
Ko uporabite več datotek, boste morali zagotoviti, da TypeScript prevede in naloži vso potrebno kodo. To lahko storite tako, da združite izhod iz prevajalnika TypeScript z uporabo outFile možnost. To bo nato prevedlo vse vhodne datoteke v eno samo izhodno datoteko JavaScript. Splošna sintaksa za izvajanje prevajalnika, kot je ta:
tsc --outFile
Zamenjati z imenom vaše ciljne datoteke JavaScript. Zamenjati z imenom datoteke TypeScript, ki vsebuje direktivo s trojno poševnico.
Na primer:
tsc --outFile index.js main.ts
Ta ukaz bo prevedel vsebino datoteke main.ts skupaj z vsemi datotekami, na katere se sklicuje direktiva s trojno poševnico, v index.js mapa.
Lahko pa določite vsako datoteko posebej:
tsc --outFile
Pomembno je vedeti, da je direktiva s trojno poševnico veljavna le, če je deklarirana na vrhu datoteke. Če ga poskušate uporabiti kjer koli drugje, ga bo TypeScript obravnaval kot običajen enovrstični komentar brez posebnega pomena.
Ali bi morali uporabljati imenske prostore ali module?
Čeprav imenski prostori niso zastareli, se pogosto priporoča organiziranje in upravljanje kode z uporabo modulov ES6. Module je lažje vzdrževati in upravljati, poleg tega pa jih lahko razširite na več datotek.
Poleg tega lahko določite razmerja med moduli v smislu uvozov in izvozov na ravni datoteke. Imenski prostori ne morejo definirati svojih odvisnosti.
Navsezadnje bo izbira med imenskimi prostori in moduli odvisna od posebnih potreb in zahtev vašega projekta, saj oba ponujata dragocen način organiziranja in upravljanja kode v TypeScriptu.