Google Closure不会因类型错误而失败

问题描述 投票:0回答:1

我正在尝试向接收对象数组的函数编写注释。我希望该对象具有某些必填属性。

当我设置内部对象的类型并对其进行检查时,它可以正常工作。但是一旦添加了数组,编译器就会“跳过”测试对象类型检查。

这里是示例代码(run it)(该链接似乎有问题,请复制并粘贴以下代码)

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @output_file_name default.js
// @formatting pretty_print
// ==/ClosureCompiler==

/**
* @record
* @struct
*/
const myType = function() {};
/** @type {!string} */
myType.prototype.arg1;

/**
* @param {myType} input
*/
function run_single(input) {
 console.log(input); 
}

/**
* @param {!Array<myType>} input_arr
*/
function run_array(input_arr) {
    console.log(input_arr);
};


var t = {"arg1": 1};
run_array([t]);
run_single(t);

我希望run_array失败。但事实并非如此。但是,run_single正常工作。

JSC_TYPE_MISMATCH: actual parameter 1 of run_single does not match formal parameter
found   : {arg1: number}
required: (myType|null) at line 26 character 11
run_single(t);
javascript google-closure-compiler jsdoc
1个回答
0
投票

不幸的是,闭包总是将数组文字推断为?数组。作为?将始终匹配,这将导致您看到的行为。

您可能会考虑使用在这里效果更好的TypeScript

© www.soinside.com 2019 - 2024. All rights reserved.