Компилятор закрытия выдает предупреждение о свойстве, которое не определено во внешнем компоненте, хотя, насколько я могу судить, свойство определено в этом внешнем компоненте.
Я хотел бы, чтобы компилятор закрытия скомпилировал это без выдачи этого предупреждения.
Я использую следующие параметры компилятора:
- angular_pass
- компиляция_уровень = РАСШИРЕННАЯ_ОПТИМИЗАЦИЯ
- create_source_map
- language_in=ECMASCRIPT5_STRICT
- manage_close_dependencies
- warning_level = ПОДРОБНО
Выдается предупреждение:
trFilter.js:19: WARNING - Property instant never defined on pascalprecht.translate.$translate
target = $translate.instant(texts.toString());
^
Файл, выдающий предупреждение, имеет следующее содержимое:
var myApp = {};
/*
* The trFilter generates translated strings.
*/
(function () {
'use strict';
/**
* @param {pascalprecht.translate.$translate} $translate
* @returns {function((Array.<string>|string)): string}
*/
var trFilter = function ($translate) {
return function(texts) {
var target;
target = $translate.instant(texts.toString());
return target;
};
};
myApp.trFilter = ['$translate', trFilter];
})();
angular.module('myApp')
.filter('tr', myApp.trFilter);
Мой внешний вид для углового перевода содержит следующее:
/**
* @fileoverview Externs for Angular Translate.
* @externs
*/
/**
* Base namespace
* @type {Object}
* @const
*/
var pascalprecht = {};
goog.provide('pascalprecht');
/**
* angular-translate namespace
* @type {Object}
* @const
*/
pascalprecht.translate = {};
goog.provide('pascalprecht.translate');
/**
* The $translate service
* @constructor
*/
pascalprecht.translate.$translate;
goog.provide('pascalprecht.translate.$translate');
/**
* Returns a translation instantly from the internal state of loaded translation. All rules
* regarding the current language, the preferred language of even fallback languages will be
* used except any promise handling. If a language was not found, an asynchronous loading
* will be invoked in the background.
*
* @param {string} translationId Translation ID
* @param {Object=} interpolateParams Params
* @param {string=} interpolationId
*
* @return {string} translation
*/
pascalprecht.translate.$translate.instant = function (translationId, interpolateParams, interpolationId) {};
goog.exportProperty(pascalprecht.translate.$translate, 'instant', pascalprecht.translate.$translate.instant);
Я не думаю, что вызовы goog.provide() и goog.exportProperty() требуются во внешнем файле. Я тестировал с ними и без них в файле, но они, похоже, не имеют никакого значения.
Я запускаю закрытие, используя помощник grunt-close-compiler grunt.
Изменение на warning_level=QUIET устраняет предупреждение, но также устраняет предупреждения о вещах, которые могут быть проблемой. Например, если я изменю вызов на это:
target = $translate.instatn(texts.toString(());
Я хотел бы получить предупреждение, потому что в объекте $translate нет функции instatn().
Что мне нужно изменить, чтобы заставить компилятор закрытия найти правильную внешнюю функцию в этом случае?