跳至主要內容

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 作為一個物件中的規則選項,以僅將檢查限制為立即指定 lambda 值的成員。

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

{ "onlyInlineLambdas": true } 選項的程式碼範例

class Container {
private onClick = () => {
/* ... */
};
}
在遊樂場中開啟

什麼時候不使用它

如果您並未嘗試強制實施強大的不變性保證,此規則可能會對您的專案過於嚴格限制。


類型檢查的檢查規則比傳統的檢查規則更強大,但還需要設定 類型檢查的檢查。啟用類型檢查的規則後,如果您遇到效能降低的問題,請參閱 效能疑難排解

資源