J'aime le fait que le compilateur Google Closure optimise les symboles dans le code. Cependant, je n'ai pas trouvé un bon moyen de définir des fonctions exportées publiques qui prennent en paramètre des objets de configuration. Considérez cet extrait de code:Meilleure façon de définir un objet de configuration à l'aide de Google Closure
goog.provide('foo');
goog.require('goog.dom');
/** @typedef {{
* id : string,
* clazz : string
* }}
*/
foo.config;
/**
* Does some neat stuff
* @param {foo.config} config
*/
foo.myFoo = function(config) {
var el = goog.dom.getElement(config.id);
goog.dom.classes.add(el, config.clazz);
}
goog.exportSymbol('foo.myFoo', foo.myFoo);
Supposons maintenant on charge ce script, et que vous voulez appeler myFoo comme suit:
<script type="text/javascript">
foo.myFoo({
id: 'unique-id',
clazz: 'pretty'
});
</script>
Si compilé, ce échouerait parce que les propriétés id et clazz ont été compressés.
Est-ce que quelqu'un connaît une façon élégante de mettre en œuvre et d'exporter des objets de configuration à l'aide du compilateur Google Closure?
Merci! J'essayais de résoudre le même problème et cela a fonctionné. Mais je ne suis pas sûr de comprendre pourquoi le compilateur obscurcit les noms de propriété lorsque la notation par points est utilisée, mais pas lorsque la notation en crochet est utilisée. Je sais que la notation en carré autorise les variables, mais le compilateur ne les masquerait-il pas aussi? –
Pourquoi changer le param à "Object"? Sa définition de type était correcte, tout ce qu'il avait à faire était de déclarer un extern ou d'utiliser un littéral de chaîne: 'config ['id']' au lieu de 'config.id'. Supprimer la définition de type correcte signifie que s'il a déjà appelé la fonction depuis son code compilé, il n'aurait aucune vérification de type. Défait le point, non? – EMMERICH
Ma compréhension de l'annotation est qu'il est utilisé pour les humains afin de donner du sens à une méthode, tout comme une ligne de commentaire plus élégante. Plus important encore, il permet à Google de lancer des erreurs si cette méthode a été mal utilisée. –