Skip to main content

prefer-readonly

Require private members to be marked as readonly if they're never modified outside of the constructor.

This rule enforces that private members are marked as readonly if they're never modified outside of the constructor.

Attributes

  • Included in configs
    • ✅ Recommended
    • 🔒 Strict
  • Fixable
    • 🔧 Automated Fixer
    • 💡 Suggestion Fixer
  • 💭 Requires type information

Rule Details

Member variables with the privacy private are never permitted to be modified outside of their declaring class. If that class never modifies their value, they may safely be marked as readonly.

Examples of code for this rule:

class Container {
// These member variables could be marked as readonly
private neverModifiedMember = true;
private onlyModifiedInConstructor: number;

public constructor(
onlyModifiedInConstructor: number,
// Private parameter properties can also be marked as readonly
private neverModifiedParameter: string,
) {
this.onlyModifiedInConstructor = onlyModifiedInConstructor;
}
}
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/prefer-readonly": "warn"
}
};

Options

This rule accepts an options object with the following properties:

interface Options {
onlyInlineLambdas?: boolean;
}

const defaultOptions: Options = [{ onlyInlineLambdas: false }];

onlyInlineLambdas

You may pass "onlyInlineLambdas": true as a rule option within an object to restrict checking only to members immediately assigned a lambda value.

{
"@typescript-eslint/prefer-readonly": ["error", { "onlyInlineLambdas": true }]
}

Example of code for the { "onlyInlineLambdas": true } options:

class Container {
private onClick = () => {
/* ... */
};
}

Resources