我遇到了闭包编译器的问题,由于某种奇怪的原因,它没有强制执行严格的类型检查。它在设置声明它的变量时正确检查类型安全,但在传递对象时未能引发类型错误。
/**
* @public
* @param x {number}
*/
SomeClass.prototype.setterMethod = function(x) {
this.var1 = x;
};
var a = new SomeClass();
a.setterMethod({}); // SHOULD THROW AN ERROR!!!!!!
为什么闭包编译器在这里不强制执行类型安全?如果我声明变量,它会正确运行:
this.var1 = {}; // correctly throws an error
但是,它不会对函数参数或在成员声明之外设置类成员变量时强制执行严格的类型安全检查。我已经在下面发布了完整的代码和输出。有没有办法强制关闭以强制进行这些类型的检查?还是我在这里做错了什么?
// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @warning_level VERBOSE
// @output_file_name default.js
// ==/ClosureCompiler==
/**
* @class SomeClass
* @constructor
*/
function SomeClass() {
/**
* @protected
* @type {number}
*/
this.var1;
};
/**
* @public
* @param x {number}
*/
SomeClass.prototype.setterMethod = function(x) {
this.var1 = x;
};
/**
* @public
* @returns {number}
*/
SomeClass.prototype.getterMethod = function() {
return this.var1;
};
/**
* @type {SomeClass}
*/
var a = new SomeClass();
a.setterMethod({});
console.log(a.getterMethod());
// output: -- NO WARNINGS!!!!
// var a=new function(){};a.a={};console.log(a.a);