# @endo/pass-style 中文文档

规范地址：https://npmcn.com/package/%40endo/pass-style/

版本：2\.0\.1
npm 元数据更新时间：2026-08-17T22:41:32.125Z
中文译文更新时间：2026-11-13T16:50:14.519Z
软件包许可：Apache-2\.0

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

原始 npm 页面：https://www.npmjs.com/package/%40endo/pass-style
原文对照：https://npmcn.com/package/%40endo/pass-style/?lang=original
项目主页：https://github.com/endojs/endo/tree/master/packages/pass-style#readme
源码仓库：https://github.com/endojs/endo

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

- 包体积（解压后）：175 kB，71 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：6 个
- 首次发布：2023-03-07T20:45:26.723Z
- 最新版本发布：2026-08-17T22:41:31.958Z
- 近 30 天下载量：40439（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：32（近 12 个月 5 个）

## 中文简介

定义可通行对象的分类.

## 安装

```sh
npm install @endo/pass-style
```

也可以使用：`pnpm add @endo/pass-style`、`yarn add @endo/pass-style`、`bun add @endo/pass-style`

## README

# `@endo/pass-style`

定义一个对象能力系统中的瓦特之间可以传递哪些数据.

## 概览

这个 **@ endo/ pass 风格** 软件包定义 `Passable` 类型和提供 `passStyleOf()` 根据 JavaScript 值分类函数 `PassStyle`。 。 。 . 这种分类决定了数值如何在孤立之间安全传递 隔间或跨越网络边界.

每个可传取值都有一套固定的传出样式 各种可能性. 关键区别在于: **通过副本** (数值本身被复制) 财务报告和审定财务报表 **通过参考**。 。 。 .

## 传递样式

| 传出样式 | 类别 | 说明 | 实例 |
| --- | --- | --- | --- |
| `'null'` | 初级 | 无效值 | `null` |
| `'undefined'` | 初级 | 未定义的值 | `undefined` |
| `'boolean'` | 初级 | 布尔原始人 | `true`, (中文(简体) ), `false` |
| `'number'` | 初级 | IEEE 754个浮点 | `42`, (中文(简体) ), `3.14`, (中文(简体) ), `NaN`, (中文(简体) ), `Infinity` |
| `'bigint'` | 初级 | 任意精度整数 | `123n`, (中文(简体) ), `-456n` |
| `'string'` | 初级 | 结构良好的字符串 | `'hello'`, (中文(简体) ), `''` |
| `'symbol'` | 初级 | 注册/知名符号 | `Symbol.iterator` |
| `'copyArray'` | 通过副本 | 冻结的可流性阵列 | `harden([1, 2, 3])` |
| `'copyRecord'` | 通过副本 | 冻结平原对象 | `harden({ x: 10 })` |
| `'remotable'` | 过继出席 | 远对象存在( R) | `Far('Counter', {...})` |
| `'tagged'` | 延长 | 特定领域类型 | `makeTagged('copySet', [...])` |
| `'error'` | 过继出席 | 错误对象 | `harden(Error('failed'))` |
| `'promise'` | 过继出席 | 承诺对象 | `Promise.resolve(42)` |

## 核心职能

### passStyleOf( 数值)

分类一个值的通过样式. 如果值不能通过,则丢出.

```javascript
import { passStyleOf } from '@endo/pass-style';

passStyleOf(42);                    // 'number'
passStyleOf(harden([1, 2]));        // 'copyArray'
passStyleOf(harden({ x: 1 }));      // 'copyRecord'
passStyleOf(Promise.resolve());     // 'promise'

// Throws for non-passable values
passStyleOf({ x: 1 });  // Error: not frozen
```

### 有价( 值)

布尔测试通过性. 回返 `true` 如果值可以通过, `false` 否则.

```javascript
import { isPassable } from '@endo/pass-style';

isPassable(42);                // true
isPassable(harden([1, 2]));    // true
isPassable({ x: 1 });          // false - not frozen
isPassable(harden({ x: 1 }));  // true
```

使用 `isPassable()` 当你想要一个布尔的结果. 使用 `passStyleOf()` 需要特定通行证样式或需要详细信息时 错误消息 .

### 远(面,方法)

创建可调取的可调取对象.

```javascript
import { Far } from '@endo/pass-style';

const counter = Far('Counter', {
  increment() { return count += 1; },
  getValue() { return count; }
});

passStyleOf(counter);  // 'remotable'
```

**说明:** 远物体是可再活化的,但不验证它们的输入. 关于自动输入验证的防御性物体,见 [@ endo/ exo (帮助)](https://npmcn.com/package/%40endo/exo/README.md)。 。 。 .

### 标记( 标记、 有效载荷)

创建 CopyTlaged 对象,特定域数据的扩展点 类型.

```javascript
import { makeTagged } from '@endo/pass-style';

const tagged = makeTagged('customType', { data: 42 });
passStyleOf(tagged);  // 'tagged'
```

标记对象由内部使用 [@ endo/ patters( 签名)](https://npmcn.com/package/%40endo/patterns/README.md) 执行 CopySet、 CopyBag 和 CopyMap .

## 可通过值

符合这些要求的值是可通行的:

1.  **初级** 总是可以通行的(未注册的符号除外)
2.  **对象必须被冻结** 通过 `harden()` 从 `@endo/pass-style` 或者说 `ses`
3.  **无循环引用** 以通过式结构(复制台、复制台、, 标记)
4.  **字符串必须造型良好** (没有未付代孕)
5.  **符号必须暂时使用 `passableSymbolForName()`** 从 `@endo/pass-style`。 。 。 .

```javascript
// Passable - frozen array of primitives
const data = harden([1, 2, 3]);

// NOT passable - not frozen
const mutable = [1, 2, 3];

// NOT passable - cyclic reference
const cyclic = harden([]);
cyclic.push(cyclic);
```

## 传-接-接-接-接-接-接

### 通过- 复制

值本身在通过时会被复制. 原作的修改不影响副本.

**用于:** 不可移动的数据、配置、消息、小结构

**传出样式 :** 原始、复制、记录、标记

```javascript
const config = harden({
  timeout: 5000,
  retries: 3
});

// When passed, config is copied
// The recipient gets a separate copy
```

### 通过参考

引证相传. 该天体仍保留在原位置.

**用于:** 有行为、可变状态、能力、大对象的物体

**传出样式 :** 可恢复、承诺、错误

```javascript
const service = Far('Service', {
  getData() { return data; }
});

// When passed, only a reference is passed
// Method calls are forwarded to the original object
```

## 类型警卫

该套件为常见的通关样式提供类型守护:

```javascript
import {
  isRecord, assertRecord,
  isCopyArray, assertCopyArray,
  isRemotable, assertRemotable,
  isAtom, assertAtom
} from '@endo/pass-style';

// Boolean checks
if (isRecord(value)) {
  // value is a CopyRecord
}

// Assertions (throw if false)
assertRemotable(obj);
// obj is guaranteed to be a remotable
```

## 与 Endo 软件包集成

-   **验证**数字 : [@ endo/ patters( 签名)](https://npmcn.com/package/%40endo/patterns/README.md) - 模式匹配到 验证可通过文件
-   **防御对象**数字 : [@ endo/ exo (帮助)](https://npmcn.com/package/%40endo/exo/README.md) - Exos结合远与 模式验证
-   **通讯**数字 : [@ endo/ eventual- send (日语)](https://npmcn.com/package/%40endo/eventual-send/README.md) - 发送 使用 E( ) 代理信件
-   **序列化**数字 : [@ endo/ marshal (韩语)](https://npmcn.com/package/%40endo/marshal/README.md) - 编码可通行文件 用于传输

**完成教学**: 见 [消息传递](https://npmcn.com/package/docs/message-passing.md) 页:1 综合指南,说明通行证式如何与图案、外出和 最终发送.

## 深潜

详细执行情况:

-   [复制记录保证](https://npmcn.com/package/%40endo/pass-style/doc/copyRecord-guarantees.md) - 详细验证 复制记录的保证
-   [复制对话框保证](https://npmcn.com/package/%40endo/pass-style/doc/copyArray-guarantees.md) - 详细验证 复制阵列的保证
-   [假设属性](https://npmcn.com/package/%40endo/pass-style/doc/enumerating-properties.md) - 财产 引用语义
-   [类型定义](https://npmcn.com/package/%40endo/pass-style/src/types.js) - 完整的类型Script类型定义

## 常见问题

### @endo/pass-style 是什么？

定义可通行对象的分类\.

### 如何安装 @endo/pass-style？

在项目目录运行 npm install @endo/pass-style，或使用 pnpm add / yarn add / bun add。

### @endo/pass-style 支持 TypeScript 吗？

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

### @endo/pass-style 支持 ESM 还是 CommonJS？

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

### @endo/pass-style 可以商用吗？

@endo/pass-style 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @endo/pass-style 的下载量有多少？

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

### @endo/pass-style 还在维护吗？

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

