Я использую шаблон дизайна, который использует оператор return для раскрытия методов открытого класса.Компилятор Google Closure, как правильно обрабатывать JSC_INEXISTENT_PROPERTY?
Проблема: Я получаю много из JSC_INEXISTENT_PROPERTY
предупреждений в расширенном режиме Closure Compiler, который делает его трудно проверить предупреждения, которые на самом деле имеют значение.
Пример шаблона я использую:
// ==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');
предупреждение:
JSC_INEXISTENT_PROPERTY: Property myPublicFunc never defined on MyClass \
at line 16 character 0
myClassInstance.myPublicFunc('Hello World');
Output (отформатированный):
(new function() {
return {
a: function(a) {
console.log(a)
}
}
}).a("Hello World");
Что странно, потому что закрытие поняло, что код был правильное выполнение и компиляция кода, переименование myPublicFunc
последовательно a
. Так почему я получил это предупреждение? Я делаю что-то неправильно?
Примечание. Я не хочу отключать эти предупреждения, потому что это также скроет предупреждения, о которых я действительно беспокоюсь. Я также не хочу использовать цитированные строки или экспорт, потому что я хочу, чтобы Closure сжимал их.
Использование новой аннотации с типом записи генерирует ошибку «аннотации« плохого типа »при ее тестировании. –
Это несчастливо, мы должны это исправить. – John
Работает с typedef. –