关于编译器的一个警告,关于一个未在extern上定义的属性,只要我可以告诉该属性是在该extern上定义的。
我想让闭包编译器干净地编译它而不发出这个警告。
我正在使用以下编译器选项:
产生的警告是:
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);
我对于angular-translate的extern包含以下内容:
/**
* @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);
我认为extern文件中不需要goog.provide()和goog.exportProperty()调用。我已经在文件中测试了有没有它们,但它们似乎没有任何区别。
我正在使用grunt-closure-compiler grunt helper运行闭包。
更改为warning_level = QUIET会消除警告,但它也会消除有关可能出现问题的警告。例如,如果我将调用更改为:
target = $translate.instatn(texts.toString(());
我想收到警告,因为$ translate对象上没有instatn()函数。
在这种情况下,我需要更改什么才能让闭包编译器找到正确的extern函数?
答案 0 :(得分:2)
我试试这个:
/**
* The $translate service
* @type {Object}
* @constructor
*/
pascalprecht.translate.$translate;
goog.provide('pascalprecht.translate.$translate');
(把@type {Object})。
&#34;警告 - 物业瞬间从未定义过 。pascalprecht.translate $翻译&#34;
没有显示更多。