我希望能够使用静态代码分析工具(标准/ eslint)来检测以下情况:
const obj = {a: {b: 'just a value'}}
// should be obj.a.b
const b = obj.a.c
// so b will be undefined
Standard和ESLint都不会在这里找到任何问题。 是否可以使用良好的代码质量工具检测它?
所以,只是想知道,是否可以使用命令行工具检测相同的问题。
答案 0 :(得分:1)
Flow或TypeScript之类的静态类型检查程序旨在捕获此类错误。尝试在try Flow editor或TypeScript playground中粘贴示例代码。在没有对代码进行任何修改以添加特定类型注释的情况下,两个检查器都会捕获错误。
Flow:
4: const b = obj.a.c
^ property `c`. Property not found in
4: const b = obj.a.c
^ object literal
Property 'c' does not exist on type '{ b: string; }'.
答案 1 :(得分:0)
在JavaScript中,undefined
是变量的正确值,因此您无法检测此值的赋值。
对于你的问题,我建议你定义一个像这样的函数:
const assignNested = function(value) {
if (value === undefined)
throw new Error("undefined assignment");
return value;
}
然后你可以按照以下方式重写你的代码:
const obj = {a: {b: 'just a value'}};
const b = assignNested(obj.a.b); // b = 'just a value'
const c = assignNested(obj.a.c); // raise exception
别忘了抓住你抛出的例外情况。如果您想定义自己的例外类型,则可以(请查看https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Error)。
答案 2 :(得分:0)
Javascript不是一种打字语言,因此在运行代码之前无法验证对象解构。
例如,当您从HTTP请求获得响应时,您的代码质量工具不会知道生成的JSON对象。