J'utilise un modèle de conception qui utilise l'instruction return pour exposer les méthodes de classe publique.Google Closure Compiler, comment gérer JSC_INEXISTENT_PROPERTY avec élégance?
problème est: Je reçois beaucoup des avertissements JSC_INEXISTENT_PROPERTY
en mode avancé de fermeture du compilateur, ce qui rend difficile de vérifier les mises en garde qui comptent réellement.
Exemple de modèle que j'utilise:
// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// ==/ClosureCompiler==
/**
* @constructor
*/
var MyClass = function() {
var someFunc = function(myString) {
console.log(myString);
}
return {
myPublicFunc: someFunc
};
}
var myClassInstance = new MyClass();
myClassInstance.myPublicFunc('Hello World');
Avertissements:
JSC_INEXISTENT_PROPERTY: Property myPublicFunc never defined on MyClass \
at line 16 character 0
myClassInstance.myPublicFunc('Hello World');
sortie (formaté):
(new function() {
return {
a: function(a) {
console.log(a)
}
}
}).a("Hello World");
Ce qui est bizarre, parce que la fermeture compris ce que le code a été faire et compilé le code correctement, en renommant myPublicFunc
systématiquement à a
. Alors pourquoi ai-je reçu cet avertissement? Est-ce que je fais quelque chose de mal? Remarque: Je ne souhaite pas désactiver ces avertissements car ils masqueraient également les avertissements dont je me soucie réellement. Je ne veux pas non plus utiliser des chaînes entre guillemets ou des exports car je veux que Closure les compresse.
L'utilisation de la nouvelle annotation avec le type d'enregistrement génère une erreur "Bad type annotation" lorsque je la teste. –
c'est dommage, nous devrions le réparer. – John
Cela fonctionne avec un typedef. –