强制转换时出现jsLint奇怪的分配错误

时间:2019-05-14 08:38:03

标签: javascript google-closure-compiler jsdoc jslint jshint

我将google-closure编译器和jsLint工具用于JS代码。因为闭包编译器查看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 个答案:

答案 0 :(得分:0)

我想为您提供一些想法;

1)来自Writing Resilient Components/#marie-kondo-your-lint-config

  

这是我建议您星期一进行的操作。召集您的团队半小时,仔细检查项目配置中启用的所有皮棉规则,然后问自己:“此规则是否曾经帮助我们捕获到错误?”如果没有,请将其关闭。

2)Closure Compiler has no issue with your code.

3)如果需要,只需投放两次即可

77

4)如果您真的很想避免重复自己,可以创建一个为您进行转换的函数;

public Contact findContact(String name) {

    Contact currentContact = null;

    for (Contact contact : contacts) {
        if (contact.getName().equals(name)) {
            currentContact = contact;
            break;
        }
    }

    return currentContact;
}

5)用ES-lint + jsdocs-plugin进行皮棉擦拭。