Uwagi dotyczące projektowania

Ukończone

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.