Czytelnicy tacy jak ty pomagają wspierać MUO. Kiedy dokonujesz zakupu za pomocą linków na naszej stronie, możemy otrzymać prowizję partnerską. Czytaj więcej.

Kolizja nazw występuje, gdy co najmniej dwa komponenty kodu używają tej samej nazwy dla zmiennej, funkcji lub klasy. Są powszechne w dużych projektach, w których wiele osób pracuje nad tą samą bazą kodu. Mogą utrudniać ustalenie, który składnik kodu jest odpowiedzialny za błędy.

Korzystając z przestrzeni nazw, możesz organizować swój kod i zarządzać nim, tak aby grupy powiązanych komponentów znajdowały się pod wspólnym identyfikatorem. Zmniejszy to ryzyko konfliktów nazw.

Tworzenie przestrzeni nazw

Możesz tworzyć przestrzenie nazw w TypeScript za pomocą przestrzeń nazw słowo kluczowe. Podążaj za nim z identyfikatorem, aby nazwać przestrzeń nazw i blok ujęty w nawiasy klamrowe. Składnia jest podobna do tej, której używasz stworzyć klasę w JavaScript.

Na przykład:

przestrzeń nazw Przykład {}

Następnie możesz zadeklarować elementy przestrzeni nazw — zmienne, funkcje i klasy — w obrębie bloku przestrzeni nazw:

instagram viewer
przestrzeń nazw Przykład {
eksportfunkcjonowaćbla(): próżnia{
konsola.dziennik(„To jest funkcja wewnątrz przykładowej przestrzeni nazw”);
}

eksportklasa Bar {
nieruchomość: strunowy;

konstruktor(nieruchomość: strunowy) {
Ten.właściwość = właściwość;
}
}

eksportkonst baza = „To jest zmienna przestrzeni nazw”
}

W powyższym przykładzie bla, Bar, I baza są członkami Przykład przestrzeń nazw. Domyślnie można uzyskać dostęp tylko do członków przestrzeni nazw w tej samej przestrzeni nazw. Użyj eksport słowo kluczowe, aby każdy element członkowski przestrzeni nazw był dostępny poza nią.

Możesz uzyskać dostęp do wszystkich publicznie dostępnych członków przestrzeni nazw, wywołując nazwę członka przestrzeni nazw za pomocą notacji kropkowej:

Przykład.foo(); // To jest funkcja wewnątrz przestrzeni nazw Example

konst słupek = nowy Przykład. Bar("strunowy");
konsola.log (bar.właściwość); // strunowy

konsola.log (Przykład.baz); // To jest zmienna przestrzeni nazw

Zagnieżdżanie przestrzeni nazw

TypeScript umożliwia zagnieżdżanie przestrzeni nazw w innych przestrzeniach nazw w celu stworzenia hierarchicznej struktury kodu. Zagnieżdżanie przestrzeni nazw może dodatkowo zmniejszyć ryzyko kolizji nazw poprzez grupowanie powiązanych przestrzeni nazw pod wspólnym identyfikatorem.

Na przykład:

przestrzeń nazw Przykład {
eksportkonst właściwość_1 = "Bla";

eksportprzestrzeń nazw Bar {
eksportkonst drukujFoo = funkcjonować () {
konsola.log (właściwość_1);
};
}

eksportprzestrzeń nazw Baz {
eksportklasa Bla {
nieruchomość: strunowy;

konstruktor(nieruchomość: strunowy) {
Ten.właściwość = właściwość;
}
}
}
}

Powyższy blok kodu zawiera przykład zagnieżdżonej przestrzeni nazw. The Przykład przestrzeń nazw to przestrzeń nazw najwyższego poziomu, zawierająca Bar przestrzeń nazw i Baz przestrzeń nazw.

Dostęp do właściwości w zagnieżdżonej przestrzeni nazw można uzyskać za pomocą notacji kropkowej zgodnej z utworzoną strukturą hierarchiczną.

Na przykład:

konsola.log (Przykład.właściwość_1); // Bla
Przykład. Bar.printFoo() // Bla
konst foo = nowy Przykład. Baz. Bla("przykład")

Ten przykładowy kod uzyskuje dostęp do każdego elementu członkowskiego przestrzeni nazw za pośrednictwem nadrzędnej przestrzeni nazw. Bezpośredni dostęp do właściwości, zamiast przez jej nadrzędną przestrzeń nazw, spowodowałby błąd:

Przykład.printFoo()
// błąd TS2339: Właściwość „printFoo” nie istnieje w typie „typeof Example”

Chociaż zagnieżdżone przestrzenie nazw mogą pomóc w organizacji kodu, głęboko zagnieżdżone przestrzenie nazw mogą dawać odwrotny skutek. Głęboko zagnieżdżone przestrzenie nazw utrudniają czytanie i konserwację kodu.

Aliasy przestrzeni nazw

Alias ​​przestrzeni nazw to skrócona nazwa nadana członkowi przestrzeni nazw, co ułatwia odwoływanie się do niej.

Możesz utworzyć alias przestrzeni nazw za pomocą import słowo kluczowe, po którym następuje nazwa, którą chcesz przypisać aliasowi. Następnie przypisz import słowa kluczowego i nazwy aliasu do członka przestrzeni nazw.

Na przykład:

przestrzeń nazw Samochód {
eksportprzestrzeń nazw Tesli {
eksportklasa Model X {
tworzyć(): Strunowy {
powrót`Model X stworzony`
}
}
}

eksportprzestrzeń nazw Toyota {
eksportklasa Camry {}
}

eksportprzestrzeń nazw Ford {
eksportklasa Mustanga {}
}
}

// Tworzenie aliasu
import tesla = samochód. Tesli

konst model X = nowy tesli. ModelX()
modelX.create() // Stworzono model X

Ten przykład tworzy alias dla Samochód. Tesli przestrzeń nazw. Możesz użyć tego aliasu, aby uzyskać dostęp do właściwości pliku Tesli przestrzeni nazw, jak klasa ModelX, łatwiej.

Używanie przestrzeni nazw w wielu plikach

Aby użyć przestrzeni nazw w innym pliku, musisz ją zaimportować. Importowanie przestrzeni nazw różni się od importowania zmiennych, funkcji, klas itp. W zależności od twojego projektu układ modułowy, możesz je zaimportować, używając formatu wymagać albo import słowo kluczowe.

Przestrzenie nazw można jednak importować tylko za pomocą dyrektywy potrójnego ukośnika, która jest jednowierszowym komentarzem zawierającym znacznik XML.

Na przykład:

// main.ts

///
Przykład.foo()

W tym przykładzie zastosowano dyrektywę potrójnego ukośnika wewnątrz a główne.ts plik. Dyrektywa powołuje się na art indeks.ts plik, który zawiera tzw Przykład przestrzeń nazw. Bez importowania przestrzeń nazw jest dostępna tylko w tym samym pliku, który ją definiuje.

Po odwołaniu się do indeks.ts plik, możesz uzyskać dostęp do Przykład przestrzeni nazw i jej publicznie dostępnych członków. Na przykład możesz zadzwonić do bla metoda na Przykład przestrzeń nazw.

Gdy użyjesz wielu plików, musisz upewnić się, że TypeScript skompiluje i załaduje cały niezbędny kod. Możesz to zrobić, łącząc dane wyjściowe z kompilatora TypeScript za pomocą metody plik wyjściowy opcja. Spowoduje to skompilowanie wszystkich plików wejściowych w jeden plik wyjściowy JavaScript. Ogólna składnia uruchamiania kompilatora w następujący sposób:

tsc -- plik wyjściowy 

Zastępować z nazwą docelowego pliku JavaScript. Zastępować z nazwą pliku TypeScript zawierającego dyrektywę potrójnego ukośnika.

Na przykład:

tsc --outFile index.js main.ts

To polecenie skompiluje zawartość pliku główne.ts plik wraz ze wszystkimi plikami, do których odwołuje się dyrektywa z potrójnym ukośnikiem, do pliku indeks.js plik.

Alternatywnie możesz określić każdy plik indywidualnie:

tsc -- plik wyjściowy 

Należy zauważyć, że dyrektywa potrójnego ukośnika jest ważna tylko wtedy, gdy jest zadeklarowana na początku pliku. Jeśli spróbujesz użyć go gdziekolwiek indziej, TypeScript potraktuje go jako zwykły jednowierszowy komentarz bez specjalnego znaczenia.

Czy powinieneś używać przestrzeni nazw lub modułów?

Chociaż przestrzenie nazw nie są przestarzałe, często zaleca się organizowanie kodu i zarządzanie nim za pomocą modułów ES6. Moduły są łatwiejsze w utrzymaniu i zarządzaniu, a ich zasięg można rozszerzyć na wiele plików.

Dodatkowo można określić relacje między modułami w zakresie importów i eksportów na poziomie pliku. Przestrzenie nazw nie mogą definiować swoich zależności.

Ostatecznie wybór między przestrzeniami nazw i modułami będzie zależał od konkretnych potrzeb i wymagań twojego projektu, ponieważ oba oferują cenny sposób organizowania kodu i zarządzania nim w TypeScript.