2016-08-22 2 views
0

In meinem eckigen Projekt kompiliert mit Closing Compiler benutze ich Firebase (separat geladen). Die externe Datei enthält:Einen Namespace als Parametertyp mit Closure Compiler verwenden

/** 
* @namespace 
*/ 
var firebase = {}; 

ich einige Funktionen, die die gesamte Feuerbasis als Parameter (zur Verfügung gestellt von AngularFire als "Firebase"), aber ich kann irgendwie nicht seine Art richtig mit Anmerkungen versehen. Der Compiler sagt

WARNING - Bad type annotation. Unknown type firebase 
* @param {firebase} Firebase 
     ^

Wenn ich etwas von innen verwende, z. firebase.auth oder firebase.database, es funktioniert, aber das Objekt, das ich bekomme, ist der ganze Namespace.

Wie kann ich Closure Compiler akzeptieren den Namespace als Typ in @param, um den Parameter zu verstehen? Ist es ein Fehler oder eine Funktion? (Ist das Schreiben eines Typedef für eine gute Problemumgehung?)

Antwort

1

Closure Compiler unterstützt diesen Anwendungsfall nicht. Namespaces sind anonyme Typen, nicht benannte Typen. Es gibt keine Möglichkeit, einen Namespace-Typ im aktuellen System korrekt zu referenzieren.

Siehe https://github.com/google/closure-compiler/issues/266

+0

Also das ist etwas, das in dem neuen Typ System funktioniert? https://github.com/google/closure-compiler/wiki/Using-NTI-(new-type-interference) – Tom

+0

Nein - neue Typ-Inferenz kann auf die Aliastypen schließen, aber es gibt immer noch keine Möglichkeit, explizit darauf zu verweisen der Typ eines Namespace oder Alias ​​in einer Annotation. –

Verwandte Themen