TypeScript+TSLint环境下不关闭规则,如何安全优化删除对象id键?
解决TSLint
no-dynamic-delete 提示的安全高效方案 既然不想修改TSLint配置关闭规则,那我们可以完全遵循规则的设计意图——避开动态计算的属性键,用静态明确的方式删除myObj里的id键,具体有两种靠谱的做法:
直接用静态属性访问语法
这是最直观高效的方案,因为id是明确已知的固定键名,不属于动态计算范畴,完全符合规则要求:// 两种写法都可行,TSLint 不会触发提示 delete myObj.id; // 或者字符串字面量形式 delete myObj['id'];这种写法JavaScript引擎能做充分优化,也不存在误删其他属性的风险,安全性和性能都拉满。
用常量类型断言锁定键名类型
如果习惯用变量管理键名(比如统一维护键名常量),可以通过as const把变量类型锁定为字面量,让TSLint识别出这并非动态计算的键:const key = 'id' as const; delete myObj[key];这样既保留了用变量管理键名的灵活性,又满足了规则对非动态键的要求。
再聊下规则的核心逻辑
TSLint的no-dynamic-delete规则之所以禁止动态计算的键,正如官方说明:
Deleting dynamically computed keys is dangerous and not well optimized
动态计算的键(比如delete myObj[someUncontrolledVariable])可能因为变量值不可控导致误删属性,同时JS引擎对这类动态操作的优化空间极小,性能远不如静态键的删除操作。我们上面的方案刚好规避了这些问题,又不用改动TSLint配置。
内容的提问来源于stack exchange,提问作者Ari Seyhun
相关产品推荐
相关产品推荐

