Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

Do sukoba imenovanja dolazi kada dvije ili više komponenti koda koriste isto ime za varijablu, funkciju ili klasu. Česti su u velikim projektima gdje mnogo ljudi radi na istoj bazi koda. Oni mogu otežati utvrđivanje koja je komponenta koda odgovorna za pogreške.

Koristeći imenske prostore, možete organizirati i upravljati svojim kodom tako da grupe povezanih komponenti budu pod zajedničkim identifikatorom. To će ublažiti rizik od sukoba naziva.

Stvaranje imenskog prostora

Možete stvoriti prostore imena u TypeScriptu pomoću imenski prostor ključna riječ. Slijedi ga identifikator za imenovanje prostora imena i blok u vitičastim zagradama. Sintaksa je slična onoj koju biste koristili stvoriti klasu u JavaScriptu.

Na primjer:

imenski prostor Primjer {}

Zatim možete deklarirati članove prostora imena—varijable, funkcije i klase—unutar bloka prostora imena:

imenski prostor
instagram viewer
Primjer {
izvozfunkcijafuj(): poništiti{
konzola.log("Ovo je funkcija unutar prostora imena Primjera");
}

izvozrazreda traka {
svojstvo: niz;

konstruktor(svojstvo: niz) {
ovaj.property = imovina;
}
}

izvozkonst baz = "Ovo je varijabla prostora imena"
}

U gornjem primjeru, fuj, Bar, i baz su članovi Primjer imenski prostor. Prema zadanim postavkama možete pristupiti samo članovima prostora imena unutar tog istog prostora imena. Koristiti izvoz ključnu riječ kako bi svaki član imenskog prostora bio dostupan izvan njega.

Možete pristupiti svim javno dostupnim članovima imenskog prostora pozivanjem imena člana imenskog prostora koristeći notaciju s točkama:

Primjer.foo(); // Ovo je funkcija unutar prostora imena Primjer

konst bar = novi Primjer. Bar("niz");
konzola.log (bar.property); // niz

konzola.log (Primjer.baz); // Ovo je varijabla prostora imena

Gniježđenje imenskih prostora

TypeScript vam omogućuje ugniježđivanje prostora imena unutar drugih prostora imena kako biste stvorili hijerarhijsku strukturu za svoj kod. Ugniježđeni prostori imena mogu dodatno smanjiti rizike od sudara imenovanja grupiranjem povezanih prostora imena pod zajedničkim identifikatorom.

Na primjer:

imenski prostor Primjer {
izvozkonst svojstvo_1 = "fuj";

izvozimenski prostor traka {
izvozkonst printFoo = funkcija () {
konzola.log (svojstvo_1);
};
}

izvozimenski prostor Baz {
izvozrazreda Foo {
svojstvo: niz;

konstruktor(svojstvo: niz) {
ovaj.property = imovina;
}
}
}
}

Gornji blok koda pruža primjer ugniježđenog prostora imena. The Primjer namespace je imenski prostor najviše razine koji sadrži Bar imenski prostor i Baz imenski prostor.

Možete pristupiti svojstvima u ugniježđenom prostoru naziva koristeći notaciju točka koja slijedi hijerarhijsku strukturu koju ste stvorili.

Na primjer:

konzola.log (Example.property_1); // Fuj
Primjer. Bar.printFoo() // Fuj
konst foo = novi Primjer. Baz. fuj("primjer")

Ovaj primjer koda pristupa svakom članu imenskog prostora preko nadređenog imenskog prostora. Izravni pristup svojstvu, umjesto kroz nadređeni imenski prostor, izbacio bi pogrešku:

Primjer.printFoo()
// pogreška TS2339: Svojstvo 'printFoo' ne postoji na tipu 'typeof Primjer'

Iako vam ugniježđeni prostori imena mogu pomoći organizirati vaš kod, duboko ugniježđeni prostori imena mogu proizvesti suprotan učinak. Duboko ugniježđeni prostori imena čine vaš kod težim za čitanje i održavanje.

Aliasi prostora imena

Pseudonim prostora imena je skraćeno ime dano članu prostora imena, što olakšava referenciranje.

Možete stvoriti pseudonim prostora imena pomoću uvoz ključnu riječ nakon koje slijedi naziv koji želite dodijeliti aliasu. Zatim dodijelite uvoz ključnu riječ i ime aliasa članu prostora imena.

Na primjer:

imenski prostor auto {
izvozimenski prostor Tesla {
izvozrazreda ModelX {
stvoriti(): Niz {
povratak`Stvoren model X`
}
}
}

izvozimenski prostor Toyota {
izvozrazreda Camry {}
}

izvozimenski prostor Ford {
izvozrazreda Mustang {}
}
}

// Stvaranje pseudonima
uvoz tesla = automobil. Tesla

konst modelX = novi tesla. ModelX()
modelX.create() // Model X stvoren

Ovaj primjer stvara pseudonim za Automobil. Tesla imenski prostor. Možete koristiti ovaj alias za pristup svojstvima Tesla imenskog prostora, poput klase ModelX, lakše.

Korištenje prostora imena u više datoteka

Da biste koristili imenski prostor u drugoj datoteci, morate ga uvesti. Uvoz prostora imena razlikuje se od uvoza varijabli, funkcija, klasa itd. Ovisno o vašem projektu modulski sustav, možete ih uvesti pomoću zahtijevati ili uvoz ključna riječ.

Međutim, prostore imena možete uvesti samo pomoću direktive s tri kose crte, što je komentar u jednom retku koji sadrži XML oznaku.

Na primjer:

// glavni.ts

///
Primjer.foo()

Ovaj primjer koristi direktivu trostruke kose crte unutar a glavni.ts datoteka. Direktiva upućuje na indeks.ts datoteku koja sadrži Primjer imenski prostor. Bez uvoza, prostor imena dostupan je samo unutar iste datoteke koja ga definira.

Nakon referiranja na indeks.ts datoteci, možete pristupiti Primjer imenskog prostora i njegovih javno dostupnih članova. Na primjer, možete nazvati fuj metoda na Primjer imenski prostor.

Nakon što upotrijebite više datoteka, morat ćete osigurati da TypeScript kompajlira i učitava sav potreban kod. To možete učiniti ulančavanjem izlaza iz TypeScript prevoditelja pomoću izlazna datoteka opcija. Ovo će zatim kompilirati sve ulazne datoteke u jednu JavaScript izlaznu datoteku. Opća sintaksa za pokretanje kompajlera ovako je:

tsc --outFile 

Zamijeniti s nazivom vaše ciljne JavaScript datoteke. Zamijeniti s nazivom TypeScript datoteke koja sadrži direktivu s tri kose crte.

Na primjer:

tsc --outFile index.js main.ts

Ova naredba će kompilirati sadržaj datoteke glavni.ts datoteku, zajedno sa svim datotekama na koje upućuje direktiva s tri kose crte, u index.js datoteka.

Alternativno, možete navesti svaku datoteku zasebno:

tsc --outFile 

Važno je napomenuti da je direktiva s tri kose crte važeća samo kada je deklarirana na vrhu datoteke. Ako ga pokušate upotrijebiti bilo gdje drugdje, TypeScript će ga tretirati kao uobičajeni komentar u jednom retku bez posebnog značenja.

Trebate li koristiti prostore imena ili module?

Iako prostori imena nisu zastarjeli, često se preporučuje organiziranje i upravljanje vašim kodom pomoću ES6 modula. Module je lakše održavati i njima upravljati i možete ih proširiti na više datoteka.

Osim toga, možete odrediti odnose između modula u smislu uvoza i izvoza na razini datoteke. Prostori imena ne mogu definirati svoje ovisnosti.

U konačnici, izbor između prostora imena i modula ovisit će o specifičnim potrebama i zahtjevima vašeg projekta, budući da oba nude vrijedan način organiziranja i upravljanja kodom u TypeScriptu.