---
url: /docs/guide/usage/linter/rules/eslint/prefer-const.md
---

### 作用

要求对在初始声明后从未被重新赋值的变量使用 `const` 声明。

#### 忽略的文件

此规则完全忽略 `.svelte` 和 `.vue` 文件。Oxlint 只解析这些文件的
`<script>` 代码块，因此模板重新赋值的绑定看起来像是从未被重新赋值，将其转换为
`const` 会导致框架编译器失败。在 Svelte 中，模板通过 `bind:this={el}` 和
`bind:value={x}` 写入；在 Vue 中，`<script setup>` 中的 `let` 是一个
`setup-let` 绑定，`v-model="x"` 和诸如 `@click="x = 1"` 这样的内联处理程序会直接对其赋值。

### 为什么这是不好的？

如果一个变量从未被重新赋值，使用 `const` 声明会更好。
`const` 声明会告诉读者：“这个变量从未被重新赋值”，从而减少认知负担并提高可维护性。

### 示例

以下是此规则的**错误**代码示例：

```js
let a = 3;
console.log(a);

let b;
b = 0;
console.log(b);

for (let i in [1, 2, 3]) {
  console.log(i);
}
```

以下是此规则的**正确**代码示例：

```js
const a = 0;

let a;
a = 0;
a = 1;

let a;
if (true) {
  a = 0;
}

for (const i in [1, 2, 3]) {
  console.log(i);
}
```

## 配置

### destructuring

type: `"any" | "all"`

配置解构赋值的处理方式。

#### `"any"`

如果解构赋值中的任意变量应当使用 `const`，则发出警告。

#### `"all"`

仅当解构赋值中的所有变量都应当使用 `const` 时才发出警告。否则，忽略它们。

### ignoreReadBeforeAssign

type: `boolean`

default: `false`

如果为 `true`，该规则将不会报告在初始赋值之前被读取的变量。
这主要用于防止与 `typescript/no-use-before-define` 规则冲突。

## 如何使用

## 版本

此规则是在 v1.43.0 中添加的。

## 参考
