# API 概览

URL: https://caijiao.org/immer/guide/api
Source: docs/immer/guide/api.md
Description: 了解 Immer 库的所有导出函数和类型，包括它们的用途和用法。

| 导出名称 | 描述 | 章节 |
| --- | --- | --- |
| `(default)` | Immer 核心 API，通常命名为 `produce`: `import {produce} from "immer"` | [Produce](./produce) |
| `applyPatches` | 给定一个基本 state 或 draft，以及一组 patches ，应用 patches | [Patches](./patches) |
| `castDraft` | 将任何不可变类型转换为其可变对应物。这只是一个转换，实际上并没有做任何事情。 | [TypeScript](./typescript) |
| `castImmutable` | 将任何可变类型转换为其不可变对应物。这只是一个转换，实际上并没有做任何事情。 | [TypeScript](./typescript) |
| `createDraft` | 给定一个基本 state，创建一个可变 draft，任何修改都将被记录下来 | [createDraft / finishDraft](./async) |
| `current` | 给定一个 draft 对象（不必是对象的根结点），对 draft 的当前状态进行快照 | [Current](./current) |
| `Draft<T>` | 暴露的 TypeScript 类型以将不可变类型转换为可变类型 | [TypeScript](./typescript) |
| `enableMapSet()` | 启用对 `Map` 和 `Set` 集合的支持。 | [Installation](./installation#pick-your-immer-version) |
| `enablePatches()` | 启用对 JSON patches 的支持 | [Installation](./installation#pick-your-immer-version) |
| `finishDraft` | 完成一个 draft，并返回最终的不可变 state | [createDraft / finishDraft](./async) |
| `freeze` | 冻结一个对象，使其不可变。在开发模式下，Immer 会自动冻结返回的 state。 | [Freezing](./freezing) |
| `Immutable<T>` | 暴露的 TypeScript 类型以将可变类型转换为不可变类型 | [TypeScript](./typescript) |
| `nothing` | 特殊标记，用于从 producer 中返回 `undefined` | [从 producers 返回新数据](./return) |
| `original` | 给定一个 draft 对象，返回其原始状态（如果有） | [Original](./original) |
| `produceWithPatches` | 类似于 `produce`，但同时返回 patches | [Patches](./patches) |
| `setAutoFreeze` | 启用或禁用自动冻结返回的 state | [Freezing](./freezing) |
| `setUseProxies` | 启用或禁用使用 Proxies（在不支持 Proxies 的环境中） | [Installation](./installation#pick-your-immer-version) |

## 导入 immer

`produce` 作为默认导出，但也可以选择将其用作名称导入，因为这有利于一些较旧的项目设置。所以下面的导入都是正确的，这里推荐第一个：

```javascript
import {produce} from "immer"
import {produce} from "immer"

const {produce} = require("immer")
const produce = require("immer").produce
const produce = require("immer").default

import unleashTheMagic from "immer"
import {produce as unleashTheMagic} from "immer"
```
