gpt4 book ai didi

javascript - Google Closure Compiler,如何优雅地处理 JSC_INEXISTENT_PROPERTY?

转载 作者:行者123 更新时间:2023-12-03 19:11:17 26 4
gpt4 key购买 nike

我正在使用一种设计模式,该模式使用 return 语句来公开公共(public)类方法。

问题是:我在 Closure Compiler 的高级模式下收到很多 JSC_INEXISTENT_PROPERTY 警告,这使得检查真正重要的警告变得困难。

我使用的模式示例:

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

/**
* @constructor
*/
var MyClass = function() {

var someFunc = function(myString) {
console.log(myString);
}

return {
myPublicFunc: someFunc
};
}

var myClassInstance = new MyClass();
myClassInstance.myPublicFunc('Hello World');

警告:

JSC_INEXISTENT_PROPERTY: Property myPublicFunc never defined on MyClass \
at line 16 character 0
myClassInstance.myPublicFunc('Hello World');

输出(格式化):

(new function() {
return {
a: function(a) {
console.log(a)
}
}
}).a("Hello World");

这很奇怪,因为 Closure 理解代码的作用并正确编译代码,将 myPublicFunc 重命名为 a。那么为什么我会收到此警告?我做错了什么吗?

注意:我不想关闭这些警告,因为它也会隐藏我真正关心的警告。我也不想使用带引号的字符串或导出,因为我确实希望 Closure 压缩它们。

最佳答案

您的函数注释不正确。它实际上不是构造函数,在这种情况下 new 关键字是不必要的。您的函数仅返回具有 myPublicFunc 属性的匿名类型。

要注释这样的模式,您可以使用记录类型:

/** @return {{myPublicFunc: function(string) }} */
var MyClass = function() {

var someFunc = function(myString) {
console.log(myString);
}

return {
myPublicFunc: someFunc
};
};

var myClassInstance = MyClass(); // new keyword not needed
myClassInstance.myPublicFunc('Hello World');

另一个注释选项是创建一个接口(interface)并将返回的对象类型转换为该接口(interface)。当多个函数返回符契约(Contract)一接口(interface)的对象时,此选项会很有用。

关于javascript - Google Closure Compiler,如何优雅地处理 JSC_INEXISTENT_PROPERTY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11178589/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com