【发布时间】:2022-09-24 03:24:02
【问题描述】:
在我们的 Angular 项目中,ESLint 大喊:
\"将变量 [key] 检测为左手或右手赋值操作数。\"
这是
detect-object-injection规则。并说://Bad: variable[key] = value;作为证明,请提供以下link 的描述。
我不会开始争辩说这条规则很糟糕。
但我对如何解决它很感兴趣。关于的链接有解决方案:
这里最直接的解决方法是避免在属性名称字段中使用用户输入。然而,这并非在所有情况下都是合理的,并且应该有一种方法可以安全地使用核心语言功能。
另一种选择是创建允许的属性名称的白名单,并通过帮助函数过滤每个用户输入,以便在允许使用之前进行检查。在您明确知道允许使用哪些属性名称的情况下,这是一个很好的选择。
如果您没有严格定义的数据模型(这并不理想,但在某些情况下必须如此),则使用与上述相同的方法,但使用不允许的属性黑名单代替一个有效的选择。
所以第一个选项“不要使用它”是不可接受的,因为我的密钥是动态的,括号表示法是访问该属性的唯一方法。
第二种解决方案也不适合我,因为我没有也无法创建允许的属性名称的白名单。
因此,我拥有的最后一个选项是使用禁止属性的黑名单。但问题是:这个黑名单在哪里拿,如何申请?它没有示例,我很感兴趣如何在 Angular 中正确实现它。
提前致谢!
更新: 由于我的问题并不完全清楚,我将再解释一次。
我的代码是:
someObject[someDynamicKey] = \'someValue\';eslint 将此行视为不好的问题。因为通过方括号表示法设置对象属性。 EsLint 说这很危险。所以我问如果不可能用点符号访问对象属性,我们该怎么办?例子?谢谢!
Explanation why Square Bracket Notation is Dangers 根据 ESLint。
-
如何利用
keyoftypescript -
@brk 您是否建议将对象原型制作为
keyof,然后将其用作黑名单? -
你没有展示足够多的代码让我们能够提出有意义的建议。
-
@JuanMendes 整个代码是
someObject[someKey] = \'value\';- eslint 抱怨设置使用括号表示法访问它的对象键值是不好的,我们不应该这样做。所以我问我们该怎么做。 -
@Experimenter 不,整个代码将包含足够的代码以确保没有未定义的变量,例如
someObject和someKey。我意识到这一行本身就足以触发 eslint 错误,但还不足以让我们知道为什么需要动态属性。请看stackoverflow.com/help/minimal-reproducible-example
标签: javascript angular typescript eslint typescript-eslint