【发布时间】:2016-03-19 15:04:40
【问题描述】:
当我使用 ADVANCED_OPTIMIZATIONS 进行编译时,Closure Compiler 会输出一个奇怪的警告。
你可以在Closure Compiler UI看到它
当我使用接口编译此代码时出现警告 - @interface
// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// ==/ClosureCompiler==
/**
* @interface
* @extends {IReused}
*/
function IRegistration() {
}
/**
* @interface
*/
function IInitializable() {
}
/**
* @param {IReused} initializer
*/
IInitializable.prototype.initializedBy = function (initializer) { };
/**
* @interface
* @extends {IOwned}
*/
function IReused() {
}
/**
* @interface
*/
function IOwned() {
}
输出:
WARNING - Could not resolve type in @extends tag of IRegistration
function IRegistration() {
^
0 error(s), 1 warning(s)
但是当我使用 @constructor 将所有接口更改为类时,一切正常。
// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// ==/ClosureCompiler==
/**
* @constructor
* @extends {IReused}
*/
function IRegistration() {
}
/**
* @constructor
*/
function IInitializable() {
}
/**
* @param {IReused} initializer
*/
IInitializable.prototype.initializedBy = function (initializer) { };
/**
* @constructor
* @extends {IOwned}
*/
function IReused() {
}
/**
* @constructor
*/
function IOwned() {
}
当我从 initializedBy 函数中删除 IReused 参数时使用接口时,一切都按预期工作。
/**
* @interface
* @extends {IReused}
*/
function IRegistration() {
}
...
/**
* @param {IReused} initializer
*/
IInitializable.prototype.initializedBy = function (initializer) { };
To ->
/**
* @param {*} initializer
*/
IInitializable.prototype.initializedBy = function (initializer) { };
谁能解释一下我做错了什么?
【问题讨论】:
-
命令您在不需要前向引用的地方键入。
-
不需要前向引用是什么意思?可以举个例子吗?
标签: javascript google-closure-compiler