Hvad er forskellen mellem navneområder og moduler i TypeScript


Jeg har brugt typescript i nogle måneder nu, og jeg har stadig ikke forstået forskellen mellem namespaces og moduler.

Jeg ved, at før de blev kaldt interne og eksterne moduler, men med begge kan jeg importere klasser fra andre filer. Så hvad er den rigtige forskel?

Svar #1

Som det er angivet i TS-håndbogen, er der 2 slags moduler: "internt" og "eksternt". Koden i det interne modul er skrevet i Typescript, og det "eksterne" er skrevet i Javascript.

For at tilpasse sig den nye ECMAScript 2015's terminologi besluttede de at omdøbe dem som følger:

  1. »Internale moduler« hedder nu »navnerum«.
  2. »Eksterne moduler« er nu blot »moduler«, for at tilpasse sig ECMAScript

Så :

  • Måden du skriver din kode på er forskellig
  • Når man bruger moduler, er klasserne ikke synlige i det globale scope, mens de er det, når man bruger namespaces:

Eksempel:

Lad os sige, at du har en offentlig navneområde-sekvens NamespaceA.NamespaceB.NamespaceC, som udsætter en offentlig klasse ClassD. Du kan få adgang til alle disse globalt på denne måde:

window.NamespaceA
window.NamespaceA.NamespaceB
window.NamespaceA.NamespaceB.NamespaceC
window.NamespaceA.NamespaceB.NamespaceC.ClassD

uden at sige window.NamespaceA=NamespaceA

og hvis du bruger moduler, skal du bruge "magi" ovenfor

Svar #2

Namespaces er TypeScripts måde at strukturere kode på, når du ikke ønsker, at den outputtede JavaScript-kode skal bruge en modulindlæser.

Du kan finde mere om navneområder vs moduler i håndbogen her.

Relaterede artikler