Uwagi dotyczące projektowania
Przestrzenie nazw lub moduły można używać dla organizacji kodu, a oba te elementy mogą zawierać kod i deklaracje.
Chociaż przestrzenie nazw są łatwe w użyciu w przypadku prostych implementacji i nie zależą od modułu ładującego moduły, moduły oferują pewne dodatkowe korzyści, których nie mają przestrzenie nazw. Moduły:
- Zadeklaruj ich zależności.
- Zapewnij lepsze ponowne użycie kodu.
- Oferują silną izolację.
- Ukryj wewnętrzne instrukcje definicji modułu i pokaż tylko metody i parametry skojarzone z zadeklarowanego składnika.
- Zapewnij lepszą obsługę narzędzi do tworzenia pakietów.
- Zalecane są w przestrzeniach nazw dla aplikacji Node.js, ponieważ moduły są domyślne.
- Można rozwiązać problemy z przepływem języka JavaScript od góry, ponieważ odwołanie do metody zewnętrznej lub klasy jest tworzone tylko w przypadku wywołania metody.
I, począwszy od ecMAScript 2015, moduły są natywną częścią języka i powinny być obsługiwane przez wszystkie zgodne implementacje aparatu. Dlatego w przypadku nowych projektów moduły są zalecane dla organizacji kodu.
Uwaga
Nie zaleca się łączenia przestrzeni nazw i modułów w tym samym projekcie.
Poniższa tabela zawiera podsumowanie i porównanie modułów i przestrzeni nazw.
Moduł | Przestrzeń nazw |
---|---|
Użyj modułów, aby zorganizować kod w oddzielne pliki na potrzeby logicznego grupowania funkcji. | Przestrzeń nazw służy do organizowania kodu w osobnych plikach na potrzeby logicznego grupowania funkcji. |
Moduły są wykonywane w ich zakresie lokalnym, a nie w zakresie globalnym. | Przestrzenie nazw są wykonywane w ich zakresie lokalnym, a nie w zakresie globalnym. |
Moduły są deklaratywne; relacje między modułami są określane pod względem importu i eksportu na poziomie pliku. | Przestrzenie nazw nie mogą zadeklarować ich zależności. |
Moduł definiuje się przy użyciu słowa kluczowego export lub import w pliku. Każdy plik zawierający import lub eksport najwyższego poziomu jest traktowany jako moduł. |
Przestrzeń nazw definiuje się przy użyciu namespace słowa kluczowego w pliku. Instrukcje przestrzeni nazw mogą być zagnieżdżone i obejmować wiele plików. |
Aby uwidocznić poszczególne składniki modułu poza modułem, użyj słowa kluczowego export . |
Aby uwidocznić poszczególne składniki przestrzeni nazw poza przestrzenią nazw, użyj słowa kluczowego export . |
Aby użyć składnika z jednego modułu w innym module, użyj słowa kluczowego import . |
Aby użyć składnika z jednej przestrzeni nazw w innym pliku TypeScript, dodaj instrukcję reference przy użyciu składni potrójnego ukośnika (/// ). |
Aby skompilować moduł i wszystkie jego pliki zależne, użyj tsc --module polecenia . |
Aby skompilować pliki TypeScript zawierające przestrzenie nazw i wszystkie zależne pliki do poszczególnych plików JavaScript, użyj tsc polecenia . |
Nie można skompilować modułów z wieloma plikami w jednym module. | Aby skompilować wszystkie pliki TypeScript zawierające przestrzenie nazw w jednym pliku JavaScript, użyj tsc --outFile polecenia . |
Moduły importuje inny moduł przy użyciu interfejsu API modułu ładującego modułu. Interfejs API określa się podczas kompilowania modułu. | Przestrzenie nazw są ładowane przez określenie nazw plików js (w kolejności) przy użyciu tagu <script> na stronie HTML. |
W modułach można ponownie wyeksportować składniki przy użyciu ich oryginalnej nazwy lub zmienić jego nazwę. | W przestrzeniach nazw nie można ponownie eksportować składników ani zmieniać ich nazw. |