Versions

no-const-assign

Disallow reassigning const variables

Recommended

Using the recommended config from @eslint/js in a configuration file enables this rule

Constant bindings cannot be modified. An attempt to modify a constant binding will raise a runtime error.

Rule Details

This rule is aimed to flag modifying variables that are declared using const, using, or await using keywords.

Examples of incorrect code for this rule:

Open in Playground
/*eslint no-const-assign: "error"*/

const a = 0;
a = 1;
Open in Playground
/*eslint no-const-assign: "error"*/

const a = 0;
a += 1;
Open in Playground
/*eslint no-const-assign: "error"*/

const a = 0;
++a;
Open in Playground
/*eslint no-const-assign: "error"*/

if (foo) {
	using a = getSomething();
	a = somethingElse;
}

if (bar) {
	await using a = getSomething();
	a = somethingElse;
}

Examples of correct code for this rule:

Open in Playground
/*eslint no-const-assign: "error"*/

const a = 0;
console.log(a);
Open in Playground
/*eslint no-const-assign: "error"*/

if (foo) {
	using a = getSomething();
	a.execute();
}

if (bar) {
	await using a = getSomething();
	a.execute();
}
Open in Playground
/*eslint no-const-assign: "error"*/

for (const a in [1, 2, 3]) { // `a` is re-defined (not modified) on each loop step.
    console.log(a);
}
Open in Playground
/*eslint no-const-assign: "error"*/

for (const a of [1, 2, 3]) { // `a` is re-defined (not modified) on each loop step.
    console.log(a);
}

When Not To Use It

If you don’t want to be notified about modifying variables that are declared using const, using, and await using keywords, you can safely disable this rule.

Handled by TypeScript

It is safe to disable this rule when using TypeScript because TypeScript's compiler enforces this check.

Version

This rule was introduced in ESLint v1.0.0-rc-1.

Resources

Change Language