Designöverväganden

Slutförd

Du kan använda namnrymder eller moduler för kodorganisation och båda kan innehålla kod och deklarationer.

Även om namnrymder är enkla att använda för enkla implementeringar och inte är beroende av en modulinläsare, erbjuder moduler vissa ytterligare fördelar som namnrymder inte har. Modules:

  • Deklarera sina beroenden.
  • Ge bättre återanvändning av kod.
  • Erbjuder stark isolering.
  • Dölj de interna isatserna för moduldefinitionerna och visa endast de metoder och parametrar som är associerade med den deklarerade komponenten.
  • Ge bättre verktygsstöd för paketering.
  • Rekommenderas över namnområden för Node.js program eftersom moduler är standard.
  • Kan lösa problem med Uppifrån och ned-flödet i JavaScript eftersom en referens till en extern metod eller klass instansieras endast vid metodanrop.

Och från och med ECMAScript 2015 är moduler en inbyggd del av språket och bör stödjas av alla implementeringar av kompatibla motorer. För nya projekt rekommenderas därför moduler för kodorganisation.

Anteckning

Vi rekommenderar inte att kombinera namnrymder och moduler i samma projekt.

I följande tabell sammanfattas och jämförs moduler och namnområden.

Modul Namnområde
Använd moduler för att ordna kod i separata filer för logisk gruppering av funktioner. Använd namnområden för att ordna kod i separata filer för logisk gruppering av funktioner.
Moduler körs i sitt lokala omfång, inte i det globala omfånget. Namnrymder körs i sitt lokala omfång, inte i det globala omfånget.
Moduler är deklarativa; relationerna mellan moduler anges i termer av importer och exporter på filnivå. Namnrymder kan inte deklarera sina beroenden.
Du definierar en modul genom att använda export import nyckelordet eller i en fil. Alla filer som innehåller en import eller export på toppnivå betraktas som en modul. Du definierar ett namnområde med hjälp av namespace nyckelordet i en fil. Namnområdessatser kan kapslas och sträcka sig över flera filer.
Om du vill exponera enskilda modulkomponenter utanför modulen använder du export nyckelordet . Om du vill exponera enskilda namnområdeskomponenter utanför namnområdet använder du export nyckelordet .
Om du vill använda en komponent från en modul i en annan modul använder du import nyckelordet . Om du vill använda en komponent från ett namnområde i en annan TypeScript-fil lägger du till en -instruktion med hjälp av reference syntaxen för trippelsnedstreck ( /// ).
Om du vill kompilera en modul och alla beroende filer använder du tsc --module kommandot . Om du vill kompilera TypeScript-filer som innehåller namnrymder och alla deras beroende filer till enskilda JavaScript-filer använder du tsc kommandot .
Det går inte att kompilera moduler med flera filer till en enda modul. Om du vill kompilera alla TypeScript-filer som innehåller namnrymder till en enda JavaScript-fil använder du tsc --outFile kommandot .
Moduler importerar en annan modul med hjälp av ett API för modulinläsare. Du anger API:et när du kompilerar modulen. Namnområden läses in genom att ange.js namn (i ordning) med hjälp av <script> taggen på HTML-sidan.
I moduler kan du exportera om komponenterna med deras ursprungliga namn eller byta namn på dem. I namnrymder kan du inte exportera om komponenter eller byta namn på dem.