为什么Closure编译器重命名extern类型的属性?

时间:2011-11-19 18:30:01

标签: javascript google-closure-compiler

我把它放在外部文件中:

/** @typedef {{english: string, spanish: string}} */
var SpanishNoun;

然后我有javascript:

/**
 * @param {SpanishNoun} n 
 */
exp1.processData3 = function (n) {
    console.log("pd3:", n.english, n.spanish, n['english'], n['spanish']);
}

编译为:

function(a){console.log("pd3:",a.a,a.c,a.english,a.spanish)};

所以它仍然将'english'重命名为'a'等等。你怎么阻止它?为什么它认为它可以重命名“外部”的东西。

罗布

后续问题

约翰的回答引出了另一个问题:Can I tell the Closure compiler to, for specific types only, stop renaming properties?

1 个答案:

答案 0 :(得分:5)

typedef不参与重命名计算

此类型定义将:

/** @interface */
function SpanishNoun() {}
/** @type {string} */
SpanishNoun.prototype.english;
/** @type {string} */
SpanishNoun.prototype.spanish;