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 中引入。