如何禁止修改函数参数,允许Array.reduce累加器修改?
禁止修改函数参数但允许Array.reduce累加器修改的ESLint配置
你需要的是ESLint内置的no-param-reassign规则,它专门用来限制对函数参数的修改,同时可以通过配置允许Array.reduce中对累加器的操作。
核心配置
在你的ESLint配置文件(比如.eslintrc.js或.eslintrc.json)中添加如下规则:
module.exports = { // 其他配置... rules: { "no-param-reassign": [ "error", { // 禁止修改参数的属性(对应你示例中修改data.field的场景) props: true, // 允许对名为acc的参数修改属性(适配reduce累加器的常见命名) ignorePropertyModificationsFor: ["acc"], // 可选:如果你的累加器用了其他命名(比如accumulator),可以添加到数组里 // ignorePropertyModificationsFor: ["acc", "accumulator"] } ] } };
规则效果说明
- 错误示例触发报错:你提供的
incorrectUpdate函数中修改data.field的操作会被no-param-reassign规则标记为错误,符合你的需求。 - 正确示例通过校验:
validUpdate函数使用对象扩展运算符返回新对象,未修改原参数,不会触发规则。 - Array.reduce操作被允许:如下代码中对累加器
acc的修改不会被规则拦截:
const totalCount = [1, 2, 3].reduce((acc, item) => { acc.count += item; // 此操作被允许 return acc; }, { count: 0 });
扩展配置说明
如果你的项目中累加器有多种命名方式,也可以用正则匹配来放宽限制:
"no-param-reassign": [ "error", { props: true, // 匹配所有以acc开头的参数名 ignorePropertyModificationsForRegex: ["^acc"] } ]
内容的提问来源于stack exchange,提问作者karkael
相关产品推荐
相关产品推荐

