# @crutchcrew/invariant 中文文档

规范地址：https://npmcn.com/package/%40crutchcrew/invariant/

版本：1\.1\.1
npm 元数据更新时间：2026-09-12T06:30:06.685Z
中文译文更新时间：2026-11-11T02:06:56.613Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40crutchcrew/invariant
原文对照：https://npmcn.com/package/%40crutchcrew/invariant/?lang=original
项目主页：https://github.com/crutchcrew/invariant#readme
源码仓库：https://github.com/crutchcrew/invariant

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：13.9 kB，7 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2026-09-11T20:27:58.687Z
- 最新版本发布：2026-09-12T06:30:06.362Z
- 近 30 天下载量：8775（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：5（近 12 个月 5 个）

## 中文简介

您 TypeScript 工程的另一个微小的无变化软件包

## 安装

```sh
npm install @crutchcrew/invariant
```

也可以使用：`pnpm add @crutchcrew/invariant`、`yarn add @crutchcrew/invariant`、`bun add @crutchcrew/invariant`

## README

# 变化无常

[![npm version](https://img.shields.io/npm/v/@crutchcrew/invariant)](https://www.npmjs.com/package/@crutchcrew/invariant) [![gzip size](https://img.shields.io/endpoint?url=https://crutchcrew.github.io/invariant/badges/size.json)](https://www.npmjs.com/package/@crutchcrew/invariant) [![coverage](https://img.shields.io/endpoint?url=https://crutchcrew.github.io/invariant/badges/coverage.json)](https://github.com/crutchcrew/invariant/actions) [![provenance](https://img.shields.io/badge/provenance-verified-brightgreen)](https://www.npmjs.com/package/@crutchcrew/invariant) [![license](https://img.shields.io/npm/l/@crutchcrew/invariant)](https://npmcn.com/package/%40crutchcrew/invariant/LICENSE)

有自定义错误类支持的 TypeScript 不变量 – 微小为 `tiny-invariant`,类型安全为 `ts-invariant`多才多艺,别无他法.

## 如何运作

如果值是 [叶子](https://developer.mozilla.org/en-US/docs/Glossary/Falsy)如果值为 [事实](https://developer.mozilla.org/en-US/docs/Glossary/Truthy),继续执行,并缩小类型.

```ts
import { invariant } from "@crutchcrew/invariant"

const user: User | null = getUser()
invariant(user, "User not found")
console.log(user.name) // user is narrowed to User
```

## 为什么这个包

|  | 这个包 | [微小变化性](https://github.com/alexreardon/tiny-invariant) | [ts-invatant(变异)](https://github.com/apollographql/invariant-packages) | [无变化](https://github.com/zertosh/invariant) |
| --- | --- | --- | --- | --- |
| **大小( gzip)** | 约364 B | ~370个B级 | ~1.0千贝 | ~1.1 kB (千位点) |
| **无依赖** | ✅ | ✅ | ❌ | ❌ |
| **树能变化的无害环境管理** | ✅ | ✅ | ✅ | ❌ |
| [**类型缩小**](https://npmcn.com/package/%40crutchcrew/invariant/#readme-how-it-works) | ✅ | ✅ | ✅ | ❌ |
| [**严格打字**](https://npmcn.com/package/%40crutchcrew/invariant/#readme-strict-typing) | ✅ | ❌ | ❌ | ❌ |
| [**懒散消息**](https://npmcn.com/package/%40crutchcrew/invariant/#readme-lazy-messages) | ✅ | ❌ | ❌ | ❌ |
| [**控制台方法**](https://npmcn.com/package/%40crutchcrew/invariant/#readme-console-methods) | ✅ | ❌ | ✅ | ❌ |
| [**工厂**](https://npmcn.com/package/%40crutchcrew/invariant/#readme-custom-errors) | ✅ | ❌ | ❌ | ❌ |

## 安装

选择你的格斗家

```sh
pnpm add @crutchcrew/invariant
```

```sh
bun add @crutchcrew/invariant
```

```sh
yarn add @crutchcrew/invariant
```

```sh
npm add @crutchcrew/invariant
```

## 使用量

```ts
const response = await fetch("/users/1")
invariant(response.ok, `Request failed: ${response.status}`)

const user = await response.json()
```

### 懒散消息

通过一个函数来推迟消息构建并避免昂贵的消息计算

```ts
invariant(value, getExpensiveMessage)
```

### 自定义错误

如果您需要丢弃特定域的错误—— a `NotFoundError`页:1 `ValidationError`或者是别的什么... ...你被留下来打包电话或者滚出自己的助手 此软件包提供 `createInvariant` 来构建一个不变量的函数,将您给出的任何错误类都抛出,同时同样的断言缩小和懒散的信息支持.

使用 `createInvariant` 来抛出自己的错误类型 :

```ts
import { createInvariant } from "@crutchcrew/invariant"

class HttpError extends Error {
    name = "HttpError"
}

const invariant = createInvariant(HttpError)

export async function getUser(id: string) {
    const response = await fetch(`/users/${id}`)
    invariant(response.ok, `Request failed: ${response.status}`)

    return response.json()
}
```

### 控制台方法

变异函数暴露 `debug`, (中文(简体) ), `log`, (中文(简体) ), `warn`,以及 `error` 向相应机构授权的方法 `console` 方法:

```ts
invariant.debug(`Message ${id} sent`)
invariant.log("User", user)
invariant.warn("Unexpected state", { detail })
invariant.error("Something went wrong")
```

### 严格打字

默认的变量允许通过任何值作为条件,这样它就可以检查任何真实/虚伪值——对象,字符串,数字,无论你交出它什么. 从 `@crutchcrew/invariant/strict` 而不是要求实际 `boolean`,在类型级别进行意外的真相/虚假检查:

```ts
import { invariant } from "@crutchcrew/invariant/strict"

invariant(user !== null, "User not found") // ✅ boolean condition
invariant(user, "User not found") // ❌ type error: User | null is not assignable to boolean
```

它和普通的无变体一样的运行时间——只是更严格的类型层——所以 `createInvariant` 财务报告和审定财务报表 `InvariantError` 也可从下列网址获得: `/strict`。 。 。 .

## API 密码

### `invariant(condition, message?)`

```ts
// default
(condition: unknown, message?: string | (() => string)) => asserts condition
// strict
(condition: boolean, message?: string | (() => string)) => asserts condition
```

掷出 `InvariantError` 若为 `condition` 是恶作剧。 缩小类型 `condition` 说实话.

### `createInvariant(ErrorClass)`

```ts
;<E extends Error>(ErrorClass: new (message: string) => E) => Invariant
```

返回丢出的新不变量函数 `ErrorClass` 改为 `InvariantError`。 。 。 .

### `InvariantError`

被丢弃的默认错误类 `invariant`扩展 `Error` 与 `framesToPop = 1` 用于更干净的堆栈痕迹.

## 发展

```sh
bun install
bun test
bun run check    # fmt + lint (with type-check) in parallel
```

## 贷项

API和 `InvariantError` 设计基于 [ts-invatant(变异)](https://github.com/apollographql/invariant-packages) 由本·纽曼和阿波罗团队出演. 这个 `/strict` 切入点灵感来自 [ts-tiny-invatant 缩写](https://github.com/iyegoroff/ts-tiny-invariant) 伊戈尔·叶戈罗夫著.

## 常见问题

### @crutchcrew/invariant 是什么？

您 TypeScript 工程的另一个微小的无变化软件包

### 如何安装 @crutchcrew/invariant？

在项目目录运行 npm install @crutchcrew/invariant，或使用 pnpm add / yarn add / bun add。

### @crutchcrew/invariant 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @crutchcrew/invariant 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @crutchcrew/invariant 可以商用吗？

@crutchcrew/invariant 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @crutchcrew/invariant 的下载量有多少？

根据 npm 官方下载统计，@crutchcrew/invariant 在 2026/10/11 – 2026/11/09 这 30 天内被下载 8,775 次，日均约 293 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @crutchcrew/invariant 还在维护吗？

最新版本 1\.1\.1 发布于 2026/09/12（1 个月前）；至今共发布 5 个版本，其中过去 12 个月发布了 5 个；首次发布于 2026/09/12。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

