为JavaScript输入检查器?

时间:2011-02-08 05:23:20

标签: javascript static-analysis typechecking

有谁知道是否有一个分析JavaScript代码和检测类型错误的好工具?我知道JavaScript本身是弱动态类型的,但如果我有一个程序可以验证我的所有字段访问都是合理的,并且我不会尝试处理像字符串这样的数字,那将是非常好的。我知道在JavaScript中有一些有效的用例,其中添加或删除字段或在不同类型之间进行转换是有效和预期的,但是有些错误是如此明显,似乎它们可能在脚本开始运行之前被捕获。

我听说过JSLint,但我的理解是它主要是一种样式工具而不是语义分析器。如果我对此错了,那么告诉我这个问题就是这个问题的有效答案。

5 个答案:

答案 0 :(得分:7)

如果您按照建议使用jsDoc注释注释函数,Google闭包编译器会执行某些类型检查。见http://code.google.com/closure/compiler/docs/js-for-compiler.html

答案 1 :(得分:2)

另一种选择 - https://github.com/yarax/typelint

这是一个EsLint插件,它根据JSDoc注释进行类型检查。

此外,它支持自己的扩展,以使用Redux状态或Swagger模式(基本上任何JSON模式)进行类型检查。因此,您不需要自己描述复杂的复合类型。

答案 2 :(得分:1)

由于JavaScript的动态特性,使用任何自动化工具都无法自信地进行静态分析。但是,一个做得很好的工具是Jetbrain的WebStorm以及其他支持JavaScript的IDE。

答案 3 :(得分:0)

Facebook有新的类型检查器 - flow

它有一个plugin可以将您的JSDoc注释转换为流注释。

答案 4 :(得分:0)

以下是有关如何在JavaScript中进行类型检查的基本示例:

const Int = (val) => {
    if (Number.isInteger(val)) {
        return val;
    }else {
        throw new TypeError(`Argument value ${val} is not integer`);
    }
    return 0; //Unreachable: for static analysis
};

const sum = function(_, numA = Int(_[0]), numB = Int(_[1])) {
    return `Sum is ${numA + numB}`;
};

console.log(sum([1, 2])); //correct
console.log(sum([1, "2"])); //incorrect