# @deessejs/fp 中文文档

规范地址：https://npmcn.com/package/%40deessejs/fp/

版本：5\.0\.1
npm 元数据更新时间：2026-10-07T14:43:33.799Z
中文译文更新时间：2026-11-12T04:49:18.319Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：161 kB，129 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.14\.0
- 运行依赖：0 个
- 首次发布：2026-04-08T11:26:51.810Z
- 最新版本发布：2026-10-07T14:43:33.468Z
- 近 30 天下载量：2888（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：24（近 12 个月 24 个）

## 中文简介

类型脚本的功能编程工具

## 安装

```sh
npm install @deessejs/fp
```

也可以使用：`pnpm add @deessejs/fp`、`yarn add @deessejs/fp`、`bun add @deessejs/fp`

## README

# @deessejs/fp (英语)

**轻量级,TypeScript的型式安全功能编程工具.** 成果,也许,尝试,单位,和朋友——只针对无害环境管理,不依赖运行时间,为一等互操作性设计 [@ deessejs/ errors (英语)](https://github.com/deessejs/errors)。 。 。 .

 [![License](https://img.shields.io/github/license/deessejs/fp)](https://github.com/deessejs/fp/blob/main/LICENSE)[![CI](https://img.shields.io/github/actions/workflow/status/deessejs/fp/ci.yml?label=CI) ](https://github.com/deessejs/fp/actions/workflows/ci.yml)[![Stars](https://img.shields.io/github/stars/deessejs/fp?style=social) ](https://github.com/deessejs/fp/stargazers)[![npm](https://img.shields.io/npm/v/@deessejs/fp?color=brightgreen)](https://www.npmjs.com/package/@deessejs/fp)

[![Documentation](https://img.shields.io/badge/docs-fp.deessejs.com-blue)](https://fp.deessejs.com/)

> **兄弟姐妹项目:** [`@deessejs/errors`](https://github.com/deessejs/errors) 提供本地集成错误类型 [`@deessejs/fp`是因为](https://github.com/deessejs/fp) `Result` 财务报告和审定财务报表 `Try`。将它们安装在一起,以获得一个没有胶水代码的完整错误处理故事. **内部使用** 时间 [deessejs.com (英语)](https://deessejs.com/)。 。 。 .

* * *

## 包括什么

| 层 | 你得到的东西 | 为什么这很重要 |
| --- | --- | --- |
| **`Result<T, E>`** | `ok`, (中文(简体) ), `err`,图案匹配,排序 | 类型安全错误处理无一例外或无效. |
| **`Maybe<T>`** | `some`, (中文(简体) ), `none`, (中文(简体) ), `maybe`, (中文(简体) ), `map`, (中文(简体) ), `getOrElse` | 构成的可选价值. |
| **`Try<T>`** | `try`, (中文(简体) ), `tryAsync`转换为 `Result` | 在打入的 shell 中环绕抛出函数 . |
| **`Unit`** | 无效返回操作的单位类型 | 不显示“ 无值” 表示 `null` 或者说 `undefined`。 。 。 . |
| **公用事业** | `pipe`, (中文(简体) ), `flow`, (中文(简体) ), `identity`, (中文(简体) ), `constant`, (中文(简体) ), `flip`, (中文(简体) ), `tupled` | 编译功能时不附带临时助手. |
| **Async公用事业** | `sleep`, (中文(简体) ), `retry`, (中文(简体) ), `timeout`, (中文(简体) ), `Queue` | 以时间为基础的原始人 `Result`。 。 。 . |
| **上游公用事业** | `Predicate`, (中文(简体) ), `Refinement`, (中文(简体) ), `not`, (中文(简体) ), `and`, (中文(简体) ), `or` | 一等前卫和类型后卫. |
| **收集类型** | `Context`, (中文(简体) ), `Sequence`, (中文(简体) ), `Collection`,协奏器助手 | 各种来源的序列操作. |
| **发电机组成** | `gen()` 与 `yield*` | 类似同步代码的 Async 流量控制 . |
| **[`@deessejs/errors`](https://github.com/deessejs/errors) 融合** | 全体 `Result` 构造器接受 `@deessejs/errors` | 没有字符串- error footguns —— 使用真实错误类型 . |

## 为什么是这堆

-   **默认很简单.** 没有过度工程, 没有花花公子类型的体操。 只是原始人 你需要写干净的代码.
-   **仅限无害环境管理.** 现代包装,没有CJS shim,没有 `module`编号 :`main` 重叠.
-   **零运行时间依赖关系.** 唯一的对等数据是 [`@deessejs/errors`](https://github.com/deessejs/errors),这是选入。 图书馆本身是无依赖的.
-   **TypeScript 6 头等舱.** 严格类型, 不 `any` 出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出 仅凭类型是不够的.
-   **Lockfile - clean pnpm 工作空间.** 单人 `pnpm install` 重建 涂料 类型 测试整个单体.
-   **真正的测试.** 测试,包括覆盖和整合测试 [@ deessejs/ errors (英语)](https://github.com/deessejs/errors)。 。 。 .

## 快开始

### 先决条件

-   节点.js **22.14.0+ (中文(简体) )** (单位:千美元)`engines.node` (已执行)
-   小时 **10岁以上** 联合国`corepack enable` 如果未安装)
-   类型脚本 **6+ 时间** 供消费者使用(软件包输出) `dist/*.d.ts`(中文(简体) )

### 安装

```bash
# Install @deessejs/fp with its optional sibling, @deessejs/errors.
# See https://github.com/deessejs/errors
npm install @deessejs/fp @deessejs/errors
```

[`@deessejs/errors`](https://github.com/deessejs/errors) 是可选的——如果需要安装 `Result<T, E>` ,可以将键入错误而不是字符串.

### 使用量

```typescript
import { ok, err, some, none, maybe, pipe } from '@deessejs/fp';

// Result: represent values that may have failed
const divide = (a: number, b: number) => (b === 0 ? err('Division by zero') : ok(a / b));

const result = divide(10, 2);
result.match({
  ok: (value) => console.log(`Result: ${value}`),
  err: (error) => console.error(`Error: ${error}`),
});

// Maybe: represent optional values
const user = { name: 'Alice', address: { city: 'Paris' } };
const city = maybe(user.address?.city)
  .map((c) => c.toUpperCase())
  .getOrElse('Unknown');

// pipe: compose functions without glue
const trim = (s: string) => s.trim();
const uppercase = (s: string) => s.toUpperCase();
const processed = pipe('  hello  ', trim, uppercase);
```

### 引擎兼容性

| 运行时间 | 最小版本 |
| --- | --- |
| 节点.js | 22.14.0 (中文(简体) ) |
| 小时 | 10(促进发展) |
| 类型脚本 | 6.0 (韩语) |

仅限无害环境管理。 使用 CJS 解析器的消费者需要使用动态 `import()` 或迁移到无害环境管理.

## 可用命令

### 工作空间( 根)

| 命令 | 它会做什么 |
| --- | --- |
| `pnpm build` | 构建每个工作空间 |
| `pnpm test` | 在监视模式下运行所有测试 |
| `pnpm test:run` | 运行所有测试一次 |
| `pnpm lint` | 缩小每个工作空间 |
| `pnpm type-check` | 类型检查每个工作空间 |
| `pnpm format` | 格式为 Pretier |

### 软件包 : `@deessejs/fp`

| 命令 | 它会做什么 |
| --- | --- |
| `pnpm --filter @deessejs/fp build` | 构建 `dist/` |
| `pnpm --filter @deessejs/fp test` | 以监视模式运行 vitest |
| `pnpm --filter @deessejs/fp test:run` | 运行一次vitest |
| `pnpm --filter @deessejs/fp type-check` | `tsc --noEmit` |
| `pnpm --filter @deessejs/fp lint` | 运行 ESLint |

### 应用 : `web`

| 命令 | 它会做什么 |
| --- | --- |
| `pnpm --filter web dev` | 以 Dev 模式启动文件站点 |
| `pnpm --filter web build` | 构建文件站点 |

## 兼容性

### 同伴依赖关系

| 软件包 | 需求 | 页:1 |
| --- | --- | --- |
| [`@deessejs/errors`](https://github.com/deessejs/errors) | 可选, 同行 `>=1.0.0` | 如果您需要, 则需要 `err()` 以接受输入错误。 列为 `devDependency` 测试. |

### 发动机

| 外地 | 数值 |
| --- | --- |
| `engines.node` | `>=22.14.0` |
| `packageManager` | `pnpm@10.30.3` |

## 项目结构

```
.
├── packages/
│   └── fp/                # The library — @deessejs/fp on npm
│       ├── src/           # Source code (ESM)
│       ├── dist/          # Build output (gitignored)
│       ├── vitest.config.ts
│       └── tsconfig.build.json
├── apps/
│   └── web/               # Documentation site (Next.js + Fumadocs)
├── docs/
│   ├── internal/          # Engineering plans, runbooks
│   │   ├── product/
│   │   └── versions/
│   └── AGENTS.md          # Agent guidance (CLAUDE.md redirects here)
├── pnpm-workspace.yaml
├── turbo.json             # Turborepo pipelines
├── .changeset/            # Changesets for versioning
└── README.md
```

## 出版

发行版通过Refersets + npm Trusted Publishing(OIDC)实现全自动化. 没有长寿 `NPM_TOKEN` 需要时间.

| 什麽 | 怎么样 |
| --- | --- |
| 弹出版本 | 添加一个 `.changeset/<topic>.md` 带有 semver + 描述的文件 |
| 打开发布 PR | `changesets-version.yml` 打开/ 更新“ Version 套件” PR ,从装入到主 |
| 发布 | 合并版本包 PR- `publish.yml` 运行 = 版本突起 = 信任出版 = npm 有来源证明 |
| 热补 | 按一个标签 `vX.Y.Z` 到主 – 热补路径相同的工作流程运行 |
| 退后或贬值 | 计划:见 `docs/engineering/plans/release-pipeline-github-ui-setup.md` |

关于管道的全部设计,见 [`docs/engineering/plans/release-pipeline.md`](https://npmcn.com/package/%40deessejs/fp/docs/engineering/plans/release-pipeline.md)。 。 。 .

## 结构说明

-   **仅限无害环境管理.** 软件包导出ES模块. 消费者使用遗留的 CJS 解析器必须使用动态 `import()`。 。 。 .
-   **严格的类型.** `Result.match` 要求两个分支; `Maybe.getOrElse` 需要一个倒计时。 没有部分类型的出逃.
-   **组成优先于继承.** 所有原始人通过 `pipe` 财务报告和审定财务报表 `flow`没有阶级等级,没有 `extends`。 。 。 .
-   **零跑时间抽象.** 没有装饰,没有反射,没有代理陷阱. DevTools 和 `node --prof`。 。 。 .
-   **出版前经过烟雾测试.** 发布工作流程对已建成的文物进行动态的无害环境管理进口,并核实存在关键出口。 一个已断开的构建在到达 npm 之前失败了发布步骤 .
-   **[`@deessejs/errors`](https://github.com/deessejs/errors) 选择进入.** 同龄人可以选择 消费者可以选择 `@deessejs/fp` 被隔离。 一次 `@deessejs/errors` 添加,每个 `err(error)` 调用接受打出错误.
-   **认证式错误的真相来源.** 这个 `apps/app/proxy.ts` (在更广泛的deessejs monorepo中,而不是在这个repo中)在代理级别执行电子邮件验证. [@ deessejs/ errors (英语)](https://github.com/deessejs/errors) 错误被捕获并翻译为集中的 HTTP 响应 .

## 捐款

打开一个问题来讨论更大的变化. 对于打字,断开的链接和小修正,公关是受欢迎的.

在提交公关前:

1.  运行 `pnpm --filter @deessejs/fp test:run` 财务报告和审定财务报表 `pnpm --filter @deessejs/fp lint`。 。 。 .
2.  添加一个 `.changeset/<topic>.md` 如果更改是用户化的(patch / small / major) .
3.  更新 `docs/internal/product/README.md` 如果 API 表面改变.

## 许可证

[麻省理工学院](https://npmcn.com/package/%40deessejs/fp/LICENSE)。详情见LICENSE文件.

## 支助

-   问题: [github.com/deessejs/fp/问题](https://github.com/deessejs/fp/issues)
-   讨论: [github.com/deessejs/fp/讨论](https://github.com/deessejs/fp/discussions)
-   电子邮件 : [支持@deessejs.com](mailto:support@deessejs.com)
-   联合国 [fp.deessejs.com (中文(简体) )](https://fp.deessejs.com/)

## 常见问题

### @deessejs/fp 是什么？

类型脚本的功能编程工具

### 如何安装 @deessejs/fp？

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

### @deessejs/fp 支持 TypeScript 吗？

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

### @deessejs/fp 支持 ESM 还是 CommonJS？

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

### @deessejs/fp 需要什么版本的 Node\.js？

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

### @deessejs/fp 可以商用吗？

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

### @deessejs/fp 的下载量有多少？

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

### @deessejs/fp 还在维护吗？

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

