Skip to content
← Back to rules

typescript/prefer-readonly-parameter-types Nursery

💭 This rule requires type information.

何ができるか

関数およびメソッドのパラメータが読み取り専用互換の型を使用することを要求する。

なぜ問題なのか

可変なパラメータ型は、誤って変更されやすく、関数の契約を弱める。
読み取り専用のパラメータ型は意図を明確にし、API の安全性を高める。

このルールに対して 不正な コードの例:

ts
function update(items: string[]) {
  items.push("x");
}

function consume(obj: { value: string }) {
  obj.value = obj.value.trim();
}

このルールに対して 正しい コードの例:

ts
function update(items: readonly string[]) {
  return items.length;
}

function consume(obj: Readonly<{ value: string }>) {
  return obj.value;
}

設定

このルールは、以下のプロパティを持つ設定オブジェクトを受け入れます。

allow

type: array

default: []

このルールの対象外とするべき型または値の指定子。

allow[n]

type: string

特定の宣言と一致させるための型または値の指定子

次の4種類の指定子をサポートしています:

  1. 文字列指定子(非推奨):名前による万能一致
json
"Promise"
  1. ファイル指定子:ローカルファイルで宣言された型や値と一致
json
{ "from": "file", "name": "MyType" }
{ "from": "file", "name": ["Type1", "Type2"] }
{ "from": "file", "name": "MyType", "path": "./types.ts" }
  1. ライブラリ指定子:TypeScript 組み込みライブラリの型と一致
json
{ "from": "lib", "name": "Promise" }
{ "from": "lib", "name": ["Promise", "PromiseLike"] }
  1. パッケージ指定子:npm パッケージからの型や値と一致
json
{ "from": "package", "name": "Observable", "package": "rxjs" }
{ "from": "package", "name": ["Observable", "Subject"], "package": "rxjs" }

checkParameterProperties

type: boolean

default: true

コンストラクタのパラメータプロパティをチェックするかどうか。

ignoreInferredTypes

type: boolean

default: false

明示的な型注釈のないパラメータを無視するかどうか。

treatMethodsAsReadonly

type: boolean

default: false

可変なメソッドを読み取り専用メンバとして扱うかどうか。

使用方法

このルールを 有効化 するには、設定ファイルまたは CLI で次のように使用できます:

json
{
  "rules": {
    "typescript/prefer-readonly-parameter-types": "error"
  }
}
bash
oxlint --type-aware --deny typescript/prefer-readonly-parameter-types

参照