Javascript 强制转换时jsLint异常分配错误

Javascript 强制转换时jsLint异常分配错误,javascript,google-closure-compiler,jsdoc,jslint,jshint,Javascript,Google Closure Compiler,Jsdoc,Jslint,Jshint,我在JS代码中使用了google闭包编译器和jsLint工具。因为闭包编译器查看JSDoc标记,所以我需要将变量转换为正确的类型,否则编译器将抛出错误。下面的代码工作正常(没有编译器警告),但当我运行jsLint时,会出现“奇怪的赋值”错误。是否有其他方法来强制转换变量 /** @return {Town|Village|Park|Metropolis} */ var getCurrentItem = function() {...some code} var item = getCurren

我在JS代码中使用了google闭包编译器和jsLint工具。因为闭包编译器查看JSDoc标记,所以我需要将变量转换为正确的类型,否则编译器将抛出错误。下面的代码工作正常(没有编译器警告),但当我运行jsLint时,会出现“奇怪的赋值”错误。是否有其他方法来强制转换变量

/** @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) 发件人:

这是我建议你周一做的事。召集您的团队半个小时,检查项目配置中启用的每个lint规则,并问自己:“这个规则是否帮助我们捕获错误?”如果没有,请关闭它

(二)

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皮棉+

请看,听起来您需要一种方法来记录
项的类型,而无需重新分配它。您是否使用
gjslint
?它现在已被弃用:@CertainPerformance您是对的。我知道在javascript中,将变量分配给它本身是没有意义的,但我需要它来进行转换。不幸的是,您的链接仅适用于window.location或其他浏览器全局文件。@约翰林普:不。我没有使用gjsLint。@royalBlue我明白了。