投射时jsLint奇怪的分配错误
jsLint weird assignment error when casting
我对我的 JS 代码使用 google-闭包编译器和 jsLint 工具。因为闭包编译器查看 JSDoc 标签,所以我需要将变量转换为正确的类型,否则编译器会抛出错误。下面的代码工作正常(没有编译器警告),但是当我 运行 jsLint 我得到 'Weird assignment' 错误。还有其他方法可以转换变量吗?
/** @return {Town|Village|Park|Metropolis} */
var getCurrentItem = function() {...some code}
var item = getCurrentItem();
if (condition)
{
item = /** @type {Town} */ (item); // 'Weird assignment' error occurs
drawTown(item);
updateTown(item)
}
else
{
item = /** @type {Village} */ (item); // 'Weird assignment' error occurs
drawVillage(item);
updateVillage(item)
}
我希望在一行中完成转换,而不是在我需要调用的每个函数上完成!
我想为您提供一些想法;
1) 来自 Writing Resilient Components/#marie-kondo-your-lint-config:
Here’s what I suggest you to do on Monday. Gather your team for half an hour, go through every lint rule enabled in your project’s config, and ask yourself: “Has this rule ever helped us catch a bug?” If not, turn it off.
2) Closure Compiler has no issue with your code.
3) 如果必须,只需施放两次:
drawVillage(/** @type {Village} */ (item));
updateVillage(/** @type {Village} */ (item));
4) 如果你真的很在意避免重复自己,你可以创建一个函数来为你做转换;
/**
* @param {Town|Village|Park|Metropolis} p
* @return {boolean|Village}
*/
var getVillage = function(p) {
if (p.somethingVillageSpecific) {
return /** @type {Village} */ (p);
} else {
return false;
}
}
5) 使用 ES-lint + jsdocs-plugin 进行检查。
我对我的 JS 代码使用 google-闭包编译器和 jsLint 工具。因为闭包编译器查看 JSDoc 标签,所以我需要将变量转换为正确的类型,否则编译器会抛出错误。下面的代码工作正常(没有编译器警告),但是当我 运行 jsLint 我得到 'Weird assignment' 错误。还有其他方法可以转换变量吗?
/** @return {Town|Village|Park|Metropolis} */
var getCurrentItem = function() {...some code}
var item = getCurrentItem();
if (condition)
{
item = /** @type {Town} */ (item); // 'Weird assignment' error occurs
drawTown(item);
updateTown(item)
}
else
{
item = /** @type {Village} */ (item); // 'Weird assignment' error occurs
drawVillage(item);
updateVillage(item)
}
我希望在一行中完成转换,而不是在我需要调用的每个函数上完成!
我想为您提供一些想法;
1) 来自 Writing Resilient Components/#marie-kondo-your-lint-config:
Here’s what I suggest you to do on Monday. Gather your team for half an hour, go through every lint rule enabled in your project’s config, and ask yourself: “Has this rule ever helped us catch a bug?” If not, turn it off.
2) Closure Compiler has no issue with your code.
3) 如果必须,只需施放两次:
drawVillage(/** @type {Village} */ (item));
updateVillage(/** @type {Village} */ (item));
4) 如果你真的很在意避免重复自己,你可以创建一个函数来为你做转换;
/**
* @param {Town|Village|Park|Metropolis} p
* @return {boolean|Village}
*/
var getVillage = function(p) {
if (p.somethingVillageSpecific) {
return /** @type {Village} */ (p);
} else {
return false;
}
}
5) 使用 ES-lint + jsdocs-plugin 进行检查。