Kaltaisesi lukijat auttavat tukemaan MUO: ta. Kun teet ostoksen käyttämällä sivustollamme olevia linkkejä, voimme ansaita kumppanipalkkion. Lue lisää.

Nimeämistörmäys tapahtuu, kun kaksi tai useampi koodikomponentti käyttää samaa nimeä muuttujalle, funktiolle tai luokalle. Ne ovat yleisiä suurissa projekteissa, joissa monet ihmiset työskentelevät saman koodikannan parissa. Ne voivat vaikeuttaa sen määrittämistä, mikä koodikomponentti on vastuussa virheistä.

Nimiavaruuksien avulla voit järjestää ja hallita koodiasi niin, että toisiinsa liittyvien komponenttien ryhmät ovat yhteisen tunnisteen alla. Tämä vähentää nimeämisristiriitojen riskiä.

Nimitilan luominen

Voit luoda nimiavaruuksia TypeScriptissä käyttämällä nimiavaruus avainsana. Seuraa sitä tunnisteella nimetäksesi nimiavaruuden ja lohkon, joka on ympäröity aaltosulkeilla. Syntaksi on samanlainen kuin käyttämäsi syntaksi Luo luokka JavaScriptillä.

Esimerkiksi:

nimiavaruus Esimerkki {}

Voit sitten ilmoittaa nimiavaruuden jäsenet – muuttujat, funktiot ja luokat – nimiavaruuslohkossa:

instagram viewer
nimiavaruus Esimerkki {
viedätoimintoFoo(): mitätön{
konsoli.Hirsi("Tämä on esimerkkinimiavaruuden sisällä oleva funktio");
}

viedäluokkaa baari {
omaisuus: merkkijono;

rakentaja(omaisuus: merkkijono) {
Tämä.property = omaisuus;
}
}

viedäkonst baz = "Tämä on nimitilan muuttuja"
}

Yllä olevassa esimerkissä Foo, Baari, ja baz ovat jäseniä Esimerkki nimiavaruus. Oletusarvoisesti voit käyttää vain samassa nimiavaruudessa olevan nimitilan jäseniä. Käytä viedä avainsana, jotta jokainen nimitilan jäsen on käytettävissä sen ulkopuolella.

Voit käyttää kaikkia julkisesti saatavilla olevia nimiavaruuden jäseniä kutsumalla nimiavaruuden jäsenen nimeä käyttämällä pistemerkintää:

Esimerkki.foo(); // Tämä on esimerkkinimiavaruuden sisällä oleva funktio

konst baari = Uusi Esimerkki. Baari("merkkijono");
konsoli.log (bar.property); // merkkijono

konsoli.log (esimerkki.baz); // Tämä on nimitilan muuttuja

Sisäkkäiset nimitilat

TypeScriptin avulla voit upottaa nimiavaruuksia muiden nimiavaruuksien sisään luodaksesi koodillesi hierarkkisen rakenteen. Nimiavaruuksien yhdistäminen voi edelleen vähentää nimeämistörmäysten riskiä ryhmittelemällä toisiinsa liittyvät nimitilat yhteisen tunnisteen alle.

Esimerkiksi:

nimiavaruus Esimerkki {
viedäkonst ominaisuus_1 = "Foo";

viedänimiavaruus baari {
viedäkonst printFoo = toiminto () {
konsoli.log (ominaisuus_1);
};
}

viedänimiavaruus Baz {
viedäluokkaa Foo {
omaisuus: merkkijono;

rakentaja(omaisuus: merkkijono) {
Tämä.property = omaisuus;
}
}
}
}

Yllä oleva koodilohko tarjoaa esimerkin sisäkkäisestä nimiavaruudesta. The Esimerkki nimiavaruus on ylimmän tason nimiavaruus, joka sisältää Baari nimiavaruus ja Baz nimiavaruus.

Voit käyttää sisäkkäisen nimitilan ominaisuuksia käyttämällä luomaasi hierarkkista rakennetta noudattavaa pistemerkintää.

Esimerkiksi:

konsoli.log (esimerkki.ominaisuus_1); // Foo
Esimerkki. Bar.printFoo() // Foo
konst foo = Uusi Esimerkki. Baz. Foo("esimerkki")

Tämä esimerkkikoodi käyttää jokaista nimiavaruuden jäsentä päänimiavaruuden kautta. Omaisuuden käyttäminen suoraan sen ylätason nimitilan sijaan aiheuttaisi virheen:

Esimerkki.printFoo()
// virhe TS2339: Ominaisuutta "printFoo" ei ole tyypillä "typeof Esimerkki"

Vaikka sisäkkäiset nimitilat voivat auttaa sinua järjestämään koodisi, syvälle sisäkkäiset nimitilat voivat tuottaa päinvastaisen vaikutuksen. Syvästi sisäkkäiset nimitilat tekevät koodistasi vaikeamman lukea ja ylläpitää.

Nimitilan aliakset

Nimitilan alias on lyhennetty nimiavaruuden jäsenelle annettu nimi, joka helpottaa viittaamista.

Voit luoda nimiavaruuden aliaksen käyttämällä tuonti avainsana ja nimi, jonka haluat määrittää aliakselle. Määritä sitten tuonti avainsana ja aliaksen nimi nimitilan jäsenelle.

Esimerkiksi:

nimiavaruus Auto {
viedänimiavaruus Tesla {
viedäluokkaa MalliX {
luoda(): merkkijono {
palata"Malli X luotu".
}
}
}

viedänimiavaruus Toyota {
viedäluokkaa Camry {}
}

viedänimiavaruus Ford {
viedäluokkaa Mustang {}
}
}

// Aliaksen luominen
tuonti tesla = auto. Tesla

konst malliX = Uusi tesla. MalliX()
malliX.luo() // Malli X luotu

Tämä esimerkki luo aliaksen kohteelle Auto. Tesla nimiavaruus. Voit käyttää tätä aliasta päästäksesi käsiksi sivuston ominaisuuksiin Tesla Nimiavaruus, kuten ModelX-luokka, helpommin.

Nimiavaruuksien käyttäminen useissa tiedostoissa

Jos haluat käyttää nimiavaruutta toisessa tiedostossa, sinun on tuotava se. Nimiavaruuksien tuonti eroaa muuttujien, funktioiden, luokkien jne. tuomisesta. Projektistasi riippuen moduulijärjestelmä, voit tuoda ne joko käyttämällä vaatia tai tuonti avainsana.

Voit kuitenkin tuoda nimiavaruuksia vain käyttämällä kolminkertaista kauttaviivaa, joka on yksirivinen kommentti, joka sisältää XML-tunnisteen.

Esimerkiksi:

// main.ts

///
Esimerkki.foo()

Tässä esimerkissä käytetään kolmoisviivaa a: n sisällä main.ts tiedosto. Direktiivissä viitataan index.ts tiedosto, joka sisältää Esimerkki nimiavaruus. Ilman tuontia nimiavaruus on käytettävissä vain samassa tiedostossa, joka määrittää sen.

Viittauksen jälkeen index.ts tiedosto, voit käyttää Esimerkki nimiavaruus ja sen julkisesti saatavilla olevat jäsenet. Voit esimerkiksi soittaa foo menetelmällä Esimerkki nimiavaruus.

Kun käytät useita tiedostoja, sinun on varmistettava, että TypeScript kääntää ja lataa kaiken tarvittavan koodin. Voit tehdä sen ketjuttamalla tulosteet TypeScript-kääntäjästä käyttämällä outFile vaihtoehto. Tämä kokoaa sitten kaikki syötetiedostot yhdeksi JavaScript-tulostetiedostoksi. Yleinen syntaksi kääntäjän suorittamiselle seuraavasti:

tsc --outFile 

Korvata kohteena olevan JavaScript-tiedoston nimellä. Korvata kolmoisviiva-direktiivin sisältävän TypeScript-tiedoston nimellä.

Esimerkiksi:

tsc --outFile index.js main.ts

Tämä komento kokoaa sisällön main.ts tiedosto ja kaikki tiedostot, joihin triple-slash-direktiivi viittaa index.js tiedosto.

Vaihtoehtoisesti voit määrittää jokaisen tiedoston erikseen:

tsc --outFile 

On tärkeää huomata, että kolmoisviiva-direktiivi on voimassa vain, kun se on ilmoitettu tiedoston yläosassa. Jos yrität käyttää sitä missä tahansa muualla, TypeScript käsittelee sitä tavallisena yksirivisenä kommenttina, jolla ei ole erityistä merkitystä.

Pitäisikö sinun käyttää nimiavaruuksia vai moduuleja?

Vaikka nimiavaruudet eivät ole vanhentuneita, koodin järjestämistä ja hallintaa ES6-moduuleilla suositellaan usein. Moduulit on helpompi ylläpitää ja hallita, ja voit kattaa ne useisiin tiedostoihin.

Lisäksi voit määrittää moduulien väliset suhteet tuontiin ja vientiin tiedostotasolla. Nimiavaruudet eivät voi määrittää riippuvuuksiaan.

Lopulta valinta nimiavaruuksien ja moduulien välillä riippuu projektisi erityistarpeista ja vaatimuksista, koska molemmat tarjoavat arvokkaan tavan järjestää ja hallita koodia TypeScriptissä.