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;
}
}
プレイグラウンドで開くclass Container {
// Public members might be modified externally
public publicMember: boolean;
// Protected members might be modified by child classes
protected protectedMember: number;
// This is modified later on by the class
private modifiedLater = 'unchanged';
public mutate() {
this.modifiedLater = 'mutated';
}
// This is modified later on by the class
#modifiedLaterPrivateField = 'unchanged';
public mutatePrivateField() {
this.#modifiedLaterPrivateField = 'mutated';
}
}
プレイグラウンドで開くオプション
このルールは次のオプションを受け入れます
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 = () => {
/* ... */
};
}
プレイグラウンドで開くclass Container {
private neverModifiedPrivate = 'unchanged';
}
プレイグラウンドで開く使用しない場合
強力な不変性保証を強制しようとしていない場合、このルールはプロジェクトにとって厳しすぎる可能性があります。
型チェックされたlintルールは、従来のlintルールよりも強力ですが、型チェックされたlintingを設定する必要があります。型チェックされたルールを有効にした後にパフォーマンスの低下が発生した場合は、パフォーマンストラブルシューティングを参照してください。