2016-05-09 9 views
10

Ho usato il dattiloscritto da alcuni mesi e non ho ancora capito la differenza dai namespace e dai moduli.Qual è la differenza tra spazi dei nomi e moduli in dattiloscritto

So che prima di essere stati nominati interno e esterni moduli, ma con entrambi posso importare classi da altri file. Allora, qual è la differenza reale?

+2

[namespace e moduli] (https: //github.com/Microsoft/TypeScript-Handbook/blob/master/pages/Namespaces%20and%20Modules.md) –

+0

Come ho capito, i namespace si chiamavano "modules" e venivano digitati in TypeScript prima che ECMAScript venisse fuori con un modulo standard. Ora che ES ha un modulo standard, TS ha rinominato i suoi "moduli" in "namespace" e ha aggiunto il supporto per i moduli ES. Non penso che ci sia una vera ragione per utilizzare gli spazi dei nomi in futuro. – Aaron

+2

La lettura di "Namespace and Modules" di @Nitzan Tomer mi ha confuso di più. Quindi, pensi che io debba usare solo i moduli? –

risposta

3

Gli spazi dei nomi sono un modo di strutturare il codice di tipoScript quando non si desidera che il codice Javascript generato utilizzi un caricatore di moduli.

È possibile trovare ulteriori informazioni sui namespace rispetto ai moduli nel manuale here.

2

Come indicato nello TS-handbook ci sono 2 tipi di moduli: "interno" & "esterno". Il codice nel modulo interno è scritto in Typescript e "external" è scritto in Javascript.

Al fine di allinearsi con la terminologia 's New ECMAScript 2015 hanno deciso di rinominare loro come segue:

  1. 'moduli interni' sono ora 'namespace'.
  2. "moduli esterni" sono ora semplicemente "moduli", per allinearsi con ECMAScript

Quindi:

  • Il modo in cui si scrive il codice è diverso
  • Quando si utilizzano i moduli le classi sono non esposto nella portata globale, mentre usando namespace:

Esempio:

Supponiamo di avere una sequenza di spazi dei nomi pubblici NamespaceA.NamespaceB.NamespaceC che espone la classe pubblica ClassD. È possibile accedere a tutte queste a livello globale in questo modo:

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

senza dire window.NamespaceA = NamespaceA

e se si utilizza i moduli è necessario utilizzare la "magia" di cui sopra