Skip to content

prefer-class-properties

Moves simple literal defaults out of the constructor and into class fields.

By default, this rule reports this.property = value assignments inside constructors when value is known at class definition time. That includes primitive literals, literal arrays, and object literals without spreads or computed properties.

The rule only checks constructor assignments to this properties. If the value depends on constructor parameters or runtime work, it is left alone.

Incorrect
class User {
constructor() {
this.name = "Unknown";
this.age = 0;
this.flags = [true, false];
}
}
Correct
class User {
name = "Unknown";
age = 0;
flags = [true, false];
}
class Service {
constructor(options: Options) {
this.options = options;
}
}
OptionDefaultWhat it does
"always"yesReports constructor assignments of simple literal values and prefers class fields.
"never"noReports non-static class property declarations and prefers constructor initialization.
eslint.config.js
import ceaseNonsense from "eslint-plugin-cease-nonsense";
export default [
{
plugins: {
"cease-nonsense": ceaseNonsense,
},
rules: {
"cease-nonsense/prefer-class-properties": ["error", "never"],
},
},
];