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
作為一個物件中的規則選項,以僅將檢查限制為立即指定 lambda 值的成員。
{
"@typescript-eslint/prefer-readonly": [
"error",
{ "onlyInlineLambdas": true },
],
}
{ "onlyInlineLambdas": true }
選項的程式碼範例
- ❌ 不正確
- ✅ 正確
什麼時候不使用它
如果您並未嘗試強制實施強大的不變性保證,此規則可能會對您的專案過於嚴格限制。
類型檢查的檢查規則比傳統的檢查規則更強大,但還需要設定 類型檢查的檢查。啟用類型檢查的規則後,如果您遇到效能降低的問題,請參閱 效能疑難排解。