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

用于匹配特定声明的类型或值规范。

支持四种类型的规范:

  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

参考资料