为什么闭包编译器要重命名外部类型的属性?

发布于 2024-12-17 09:18:50 字数 701 浏览 2 评论 0原文

我把它放在一个 externs 文件中:

/** @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”等。你如何阻止它?为什么它认为它可以重命名“外部”的东西。

Rob

后续问题

John 的回答引出了另一个问题: 我可以告诉闭包编译器仅针对特定类型停止重命名属性吗?

I put this in an externs file:

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

Then I have javascript:

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

Which compiles to:

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

So it still renamed 'english' to 'a', etc. How do you stop that? Why does it think it can rename something that is "extern".

Rob

Follow-up Question

John's answer led to another question: Can I tell the Closure compiler to, for specific types only, stop renaming properties?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

轻许诺言 2024-12-24 09:18:50

typedef 不参与重命名计算

此类型定义将:

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

typedefs don't participate in the renaming calculation

This type definition will:

/** @interface */
function SpanishNoun() {}
/** @type {string} */
SpanishNoun.prototype.english;
/** @type {string} */
SpanishNoun.prototype.spanish;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文