メインコンテンツにスキップ

prefer-readonly

コンストラクター以外で変更されない場合、プライベートメンバーをreadonlyとしてマークすることを必須にします。

🔧

このルールによって報告されるいくつかの問題は、 --fix ESLintコマンドラインオプションによって自動的に修正可能です。.

💭

このルールを実行するには 型情報 が必要です。

プライベートメンバー変数(`private`修飾子を使用するか、プライベートな`#`フィールドを使用するかにかかわらず)は、宣言されたクラス以外で変更することはできません。そのクラスが値を変更しない場合、それらは安全に`readonly`としてマークできます。

このルールは、コンストラクター以外で変更されない場合、プライベートメンバーが`readonly`としてマークされているかどうかを報告します。

.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/prefer-readonly": "error"
}
};

プレイグラウンドでこのルールを試す ↗

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

public constructor(
onlyModifiedInConstructor: number,
// Private parameter properties can also be marked as readonly
private neverModifiedParameter: string,
) {
this.onlyModifiedInConstructor = onlyModifiedInConstructor;
}
}
プレイグラウンドで開く

オプション

このルールは次のオプションを受け入れます

type Options = [
{
onlyInlineLambdas?: boolean;
},
];

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

onlyInlineLambdas

ラムダ値がすぐに代入されたメンバーのみにチェックを制限するには、オブジェクト内のルールオプションとして`"onlyInlineLambdas": true`を渡すことができます。

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

`{ "onlyInlineLambdas": true }`オプションのコード例

class Container {
private onClick = () => {
/* ... */
};
}
プレイグラウンドで開く

使用しない場合

強力な不変性保証を強制しようとしていない場合、このルールはプロジェクトにとって厳しすぎる可能性があります。


型チェックされたlintルールは、従来のlintルールよりも強力ですが、型チェックされたlintingを設定する必要があります。型チェックされたルールを有効にした後にパフォーマンスの低下が発生した場合は、パフォーマンストラブルシューティングを参照してください。

リソース