no-import-assign
禁止为导入的绑定赋值
✅ 推荐
在配置文件中使用来自 @eslint/js
的 recommended
配置启用此规则。
通过 ES 模块更新导入的绑定会导致运行时错误。
规则详情
此规则会警告导入绑定的赋值、增量和减量操作。
此规则的错误代码示例
在游乐场中打开
/*eslint no-import-assign: "error"*/
import mod, { named } from "./mod.mjs"
import * as mod_ns from "./mod.mjs"
// ERROR: 'mod' is readonly.
// ERROR: 'named' is readonly.
// ERROR: The members of 'mod_ns' are readonly.
// ERROR: 'mod_ns' is readonly.
// Can't extend 'mod_ns'
// ERROR: The members of 'mod_ns' are readonly.
此规则的正确代码示例
在游乐场中打开
/*eslint no-import-assign: "error"*/
import mod, { named } from "./mod.mjs"
import * as mod_ns from "./mod.mjs"
mod.prop = 1
named.prop = 2
mod_ns.named.prop = 3
// Known Limitation
function test(obj) {
obj.named = 4 // Not errored because 'obj' is not namespace objects.
}
test(mod_ns) // Not errored because it doesn't know that 'test' updates the member of the argument.
何时不使用它
如果您不想收到修改导入绑定的通知,可以禁用此规则。
由 TypeScript 处理
在使用 TypeScript 时禁用此规则是安全的,因为 TypeScript 的编译器会强制执行此检查。
请注意,编译器不会捕获 Object.assign()
情况。因此,如果您在代码库中使用 Object.assign()
,此规则仍然具有一定的价值。
版本
此规则在 ESLint v6.4.0 中引入。