2016-04-18 5 views
0

Ich habe eine angular Anwendung, in typescript geschrieben, deren config Registrierung war gerade außer Kontrolle geraten, und riesig - es dauerte etwa 3 Seiten.typescript - Namespaces nicht im Import enthalten

Also habe ich es in mehrere config(fn) Abschnitte aufgeteilt, und so viel Logik aus dieser Seite wie ich konnte bewegt und bestimmte Verhaltensweisen in ihre eigenen Klassen eingekapselt; es schien die clevere Art zu sein, es zu säubern.

jede der neuen Klassen sieht in etwa so aus;

namespace config { 
    export class http { 
     constructor($httpProvider: ng.IHttpProvider){ 
      // $httpProvider configuration 
     } 
    } 
} 

so wieder in meinem main.ts, die Datei, die meine module schafft und alles registriert, ich importieren sie über.

import { http } from './config/http'; 
import { router } from ./config/router'; 
// etc. 

aber der Namensraum scheint nicht ein Teil davon zu sein. Ich kann sie nicht nennen, wie ...

config(config.http) 
config(config.router) 
// etc. 

Ich habe musste, anstatt sie neue Alias ​​geben, wenn sie bringen in;

import { http as configHttp } from './config/http'; 
import { router as configRouter } from './config/router'; 
// etc. 

Warum ist das? Kann ich irgendetwas tun, um die Namespace-Definition intakt zu halten und die einfachere Methode zu verwenden, die ich anstrebte?

+0

Ein Namespace erstellt eine globale Variable, sodass Sie keine import-Anweisung ausführen müssen. Stellen Sie nur sicher, dass alle Ihre JavaScript-Dateien in Ihre HTML-Datei geladen sind. – rgvassar

Antwort

1

Der Namespace, den Sie haben, ist redundant, wenn Sie import-Anweisungen verwenden.

hier:

import { http } from './config/http'; 

Sie fragen nur für die http-Klasse in dieser Datei so, dass das, was Sie bekommen.

Außerdem sollte es module config und nicht namespace config sein.
Sie sollten Namespaces and Modules und genauer Needless Namespacing lesen.

+0

Ich habe beides mehrmals gelesen; sie helfen nicht wirklich. Außerdem sagt das Dokument ganz klar: "Die allgemeine Idee des Namespacings besteht darin, eine logische Gruppierung von Konstrukten bereitzustellen und Namenszusammenstöße zu verhindern." - genau das mache ich. Logische Gruppierung wie Konstrukte – Ciel

+0

@Ciel Wenn Sie diesen Satz weiterlesen: 'Da die Moduldatei selbst bereits eine logische Gruppierung ist und der Name der obersten Ebene durch den Code definiert wird, der sie importiert, ist es nicht nötig, eine zusätzliche Modulschicht für exportierte Objekte zu verwenden. Der Namespacing ist hilfreich, wenn Sie keine Module verwenden, sondern einfach alles in verschiedene '.js' Dateien laden und diese dann wie' new config.http() '(ohne Import) verwenden. –

+0

Ich bin offen für andere Ideen, aber die Endziel ist, dass ich sie einfach gruppieren möchte, während sie in separaten Dateien bleiben. Ich kann keine guten Gründe dafür finden, die Klassennamen von den Namen zu unterscheiden, mit denen Sie sie benennen. – Ciel

Verwandte Themen