# @birchill/discriminator 中文文档

规范地址：https://npmcn.com/package/%40birchill/discriminator/

版本：0\.3\.1
npm 元数据更新时间：2024-11-07T02:06:22.111Z
中文译文更新时间：2026-11-08T03:34:14.238Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：24.9 kB，9 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=12\.0\.0
- 运行依赖：0 个
- peer 依赖：superstruct \>0\.16\.0 \<3\.0\.0
- 首次发布：2021-08-26T08:49:36.046Z
- 最新版本发布：2024-11-07T02:06:21.926Z
- 近 30 天下载量：1976（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：4（近 12 个月 0 个）

## 中文简介

基于 JSON typedef 歧视者类型的超结构加标签的联盟类型

## 安装

```sh
npm install @birchill/discriminator
```

也可以使用：`pnpm add @birchill/discriminator`、`yarn add @birchill/discriminator`、`bun add @birchill/discriminator`

## README

# 歧视者

标记的联盟类型 [超级结构](https://docs.superstructjs.org/) 基于 [JSON型号的 歧视者](https://jsontypedef.com/docs/jtd-in-5-minutes/#discriminator-schemas) 类型.

```typescript
import { boolean, Infer, enums, string, object } from 'superstruct';
import { discriminator } from '@birchill/discriminator';

const schema = discriminator('eventType', {
  USER_CREATED: object({ id: string() }),
  USER_PAYMENT_PLAN_CHANGED: object({
    id: string(),
    plan: enums(['FREE', 'PAID']),
  }),
  USER_DELETED: object({ id: string(), softDelete: boolean() }),
});

type SchemaType = Infer<typeof schema>;

// SchemaType =
// {
//   eventType: "USER_CREATED";
//   id: string;
// } | {
//   eventType: "USER_PAYMENT_PLAN_CHANGED";
//   id: string;
//   plan: "FREE" | "PAID";
// } | {
//   eventType: "USER_DELETED";
//   id: string;
//   softDelete: boolean;
// }
```

## 为什么?

-   如果您尝试使用上面的模型 `union()` 对象和验证失败 获取错误如 :
    
    `Expected the value to satisfy a union of ``object | object | object``, but received: [object Object]`。 。 。 .
    
    使用 `discriminator()` 错误如下:
    
    ` At path: value.name -- Expected a string with a length between ``0``and ``256`` but received one with a length of ``257`` ` 。 。 。 .
    
-   更好的语义.
    
-   方便的翻译 [JSON 类型防御器](https://jsontypedef.com/) 应 这很有用.
    

## 规格

`discriminator()` 需要两个参数:

1.  代表加标工会标记域的字符串 .
2.  键是标记值和值是的对象 `object()`, (中文(简体) ), `type()`,或 `discriminator()` 结起.

如果你需要模拟一个没有其它属性的分支,只需使用一个 空 `object()` 或者说 `type()`。 。 。 . 这很重要,因为你正在表明 是否该分支是 允许在其上添加值( q)`type()`)或不(`object()`) (中文(简体) ).

譬如说.

```typescript
discriminator('action', {
  signin: type({ email: string(), token: string() }),
  signout: type(),
});
```

你会筑巢 `discriminator()` 类似对象 :

```typescript
discriminator('result', {
  success: discriminator('task', {
    upload: type({
      filename: string(),
    }),
    download: type({
      filename: string(),
      bytes: number(),
    }),
  }),
  failure: type({
    code: number(),
  }),
});

// `Infer` here produces the type:
//
// {
//   result: "success";
//   task: "upload";
//   filename: string;
// } | {
//   result: "success";
//   task: "download";
//   filename: string;
//   bytes: number;
// } | {
//   result: "failure";
//   code: number;
// }
```

## 发展中国家

### 大楼

```
pnpm build
```

### 测试

```
pnpm test
```

### 释放

```
pnpm release-it
```

## 常见问题

### @birchill/discriminator 是什么？

基于 JSON typedef 歧视者类型的超结构加标签的联盟类型

### 如何安装 @birchill/discriminator？

在项目目录运行 npm install @birchill/discriminator，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：superstruct（\>0\.16\.0 \<3\.0\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @birchill/discriminator 支持 TypeScript 吗？

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

### @birchill/discriminator 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @birchill/discriminator 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=12\.0\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @birchill/discriminator 可以商用吗？

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

### @birchill/discriminator 的下载量有多少？

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

### @birchill/discriminator 还在维护吗？

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

