javascript - 如何防止警告 'Property MyProp1 never defined on MyObject' ?

标签 javascript google-closure-compiler google-closure

我有一些包含 JSON 字符串的 HTML。在 DOM 就绪回调中,我有这样的东西:

MyObject = JSON.parse($('#TheJsonString').html());

稍后在我的代码中,我写了一些这样的东西:

var SomeVar = MyObject.MyProp1;

然后当我通过 Google 闭包编译器运行代码时,我收到了警告

Property MyProp1 never defined on MyObject.

应该如何编写代码才不会产生警告?

最佳答案

消除警告的最简洁方法是定义 JSON 的结构。这可以使用 @type 标签来完成:

/** @type {{MyProp1:string}} */

其中 MyProp1 是属性的名称,string 是类型。

Google 的 Closure 编译器将重命名该变量。如果你不想这样,你必须使用引号 + 括号而不是点符号:

MyObject['MyProp1']

示例:将以下内容粘贴到 Closure Compiler 中:

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// ==/ClosureCompiler==

var MyObject;
function x() { // Magic happens at the next line
    /** @type {{MyProp1:string}}*/
    MyObject = JSON.parse(prompt(''));
}
function afterX() {
    var SomeVar = MyObject.MyProp1;
    alert(SomeVar);
}
x();
afterX();

输出:

var a;a=JSON.parse(prompt(""));alert(a.a);

关于javascript - 如何防止警告 'Property MyProp1 never defined on MyObject' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9561138/

相关文章:

javascript - 如何将 .LICENSE 文件作为 .txt 或类似文件类型打开?

javascript - vue.js 中的 audio.play() 不适用于 Safari 和 iPhone chrome

javascript - 如何重命名/保留回调方法

javascript - 是否可以让 Google Closure 编译器*不*内联某些函数?

timer - 如何让 goog.Timer 更精确?

javascript - 如何禁用谷歌关闭 linter 的额外空间检查?

javascript - 将 Pretender 与 Ember CLI 结合使用

javascript - Vue Router - 路径被多次连接

grails - 闭包编译器不会写出错误

javascript - 如何使用closurebuilder.py通过Google Closure Compiler编译我的库