2016-07-14 18 views
0

一个不存在的财产我有一组常数,恰似检查任何地方的代码要求

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是不存在于代码对象中,所以从分析器得到警告将是非常好的。在所有可能的情况下,不应该存在请求不存在的字段的情况。

我该如何解决这个问题最简单的方法?

+0

问题是由服务器团队球员自动生成代码的目的,是被推到了回购。 –

+0

如果你使用打字稿,那么编译器应该抱怨它,[像这里一样](https://www.typescriptlang.org/play/#src=let%20codes%20%3D%20%7B%0A%09 %09OPEN_ACCOUNT%3A%201000%2C%0A%09%09CLOSE_ACCOUNT%3A%201001%2C%0A%09%09DEPOSIT_FUNDS%3A%203000%0A%09%7D%0A 0A%%09console.log(codes.OPEN_ACCOUNTS)% 3B) –

+0

是的,应用程序正处于向TypeScript迁移的过程中,因此codebase现在是JS + TS的混合体,当所有代码都在TypeScript中时,它可能会被修复。 –

回答

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?

+0

他正在寻找一个静态分析解决方案,它不会真正帮助您在运行时查找这些解决方案(例如在生产中) –

+0

我正在寻找静态方法来分析此问题。正如Nitzan所说。 –

+0

@Sergei是的。我想我会把它留在这里,以防将来有人使用它。 –