Lint Rules

noClassAssign (since v12.0.0)

Disallow reassigning class members.

A class declaration creates a variable that we can modify, however, the modification is a mistake in most cases.

Examples

Invalid

class A {}
A = 0;
nursery/noClassAssign.js:2:1 lint/nursery/noClassAssign ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   'A' is a class.
  
    1 │ class A {}
  > 2 │ A = 0;
   ^
    3 │ 
  
   'A' is defined here.
  
  > 1 │ class A {}
         ^
    2 │ A = 0;
    3 │ 
  
A = 0;
class A {}
nursery/noClassAssign.js:1:1 lint/nursery/noClassAssign ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   'A' is a class.
  
  > 1 │ A = 0;
   ^
    2 │ class A {}
    3 │ 
  
   'A' is defined here.
  
    1 │ A = 0;
  > 2 │ class A {}
         ^
    3 │ 
  
class A {
	b() {
		A = 0;
	}
}
nursery/noClassAssign.js:3:3 lint/nursery/noClassAssign ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   'A' is a class.
  
    1 │ class A {
    2 │ 	b() {
  > 3 │ 		A = 0;
   		^
    4 │ 	}
    5 │ }
  
   'A' is defined here.
  
  > 1 │ class A {
         ^
    2 │ 	b() {
    3 │ 		A = 0;
  
let A = class A {
	b() {
		A = 0;
		// `let A` is shadowed by the class name.
	}
}
nursery/noClassAssign.js:3:3 lint/nursery/noClassAssign ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   'A' is a class.
  
    1 │ let A = class A {
    2 │ 	b() {
  > 3 │ 		A = 0;
   		^
    4 │ 		// `let A` is shadowed by the class name.
    5 │ 	}
  
   'A' is defined here.
  
  > 1 │ let A = class A {
                 ^
    2 │ 	b() {
    3 │ 		A = 0;
  

Valid

let A = class A {}
A = 0; // A is a variable.
let A = class {
    b() {
        A = 0; // A is a variable.
    }
}
class A {
	b(A) {
		A = 0; // A is a parameter.
	}
}