检查代码中的任何位置是否请求不存在的属性

时间:2016-07-14 14:23:11

标签: javascript typescript static-analysis jslint

我有一组常量,看起来像

let codes = {
    OPEN_ACCOUNT: 1000,
    CLOSE_ACCOUNT: 1001,
    DEPOSIT_FUNDS: 3000
    ...
}

有时会重命名,添加或删除密钥,因此codes对象的结构会发生变化。由于应用程序非常庞大,我很乐意使用JSLint / TSLint等工具对代码进行静态分析,以便在函数运行时使用不再可用的代码:

runServerRequest(codes.DEPOSIT_FUNDS_SPECIAL_CASE, 500)

在上面的示例中,代码对象中不存在DEPOSIT_FUNDS_SPECIAL_CASE,因此从分析器发出警告会很棒。在所有可能的情况下,不应该是在请求不存在的字段时的情况。

我如何以最简单的方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

这样做的一种方法是设置一个Proxy object,如果你访问一个不存在的属性,它将抛出:

// define codes above this line.
codes = new Proxy(codes, {
  get: function(target, prop) {
    if (!target.hasOwnProperty(prop)) {
      throw new Error('Attempting to use the deleted code `' + prop + '`.');
    }
    return target[prop]
  }
});

get method会捕获对code.some_property的所有访问,如果未定义,则抛出。{ 请注意,如果该属性已明确设置为undefined,则将不会抛出。

Can I Use?