@3fv/prelude-ts

中文文档
0.8.42发布于 2026/05/26ISCTypeScriptESM + CJS近 30 天下载 2652

一个打字功能编程库

中文使用文档
文档目录10 节
  1. 介绍
  2. 设置、地图和平等
  3. 安装
  4. 用于节点.js
  5. 使用浏览器
  6. 愿望清单/即将具备的特点
  7. 超出序曲范围
  8. 替代品和影响
  9. 类型脚本版本
  10. 图标

预奏

全体 学分归原始创造者 prelude-ts

这只是一个已出版的版本, 并添加了多个

NPM version Tests apidoc

介绍

前作-t(前作前作-t)是一个TypeScript库,旨在使功能编程 概念在 TypeScript 中可以访问和生产。 注意,尽管它是 以 TypeScript 写成, 它完全可以从 JavaScript (包括 ES5) 中使用 !

它规定 持久性 不可移动的集合(Vector, Set, Map, Stream),以及诸如Option, 不管是Predicate还是未来.

Vector.of(1,2,3)
  .map(x => x*2)
  .head()
// => Option.of(2)

Option.sequence(
  Vector.of(Option.of(1), Option.of(2)))
// => Option.of(Vector.of(1,2))

Vector.of(1,2,3,4).groupBy(x => x%2)
// => HashMap.of([0, Vector.of(2,4)],[1, Vector.of(1,3)])

Vector.of(1,2,3).zip("a", "b", "c").takeWhile(([k,v]) => k<3)
// Vector.of([1,"a"],[2,"b"])

HashMap.of(["a",1],["b",2]).get("a")
// Option.of(1)

收集器也是JavaScript traperables, 所以如果你有 ES6 运行时间, 您可以使用 for .. of 建在他们身上。 如果你不熟悉的话 不可改变的收藏, list.append(newItem) 保留 list 不变; append() 返回新列表。 不可改变性有助于代码的推理.

你可以检查 用户指南, (中文(简体) ), 浏览 API 文档, (中文(简体) ), 或者我们 博客。 。 。 . 注意构造器是私有的,你应该使用静态方法建造 (b) 诸如: Option.of, (中文(简体) ), Vector.of, (中文(简体) ), Vector.ofIterable,等等。 (笑声).

HashSet 财务报告和审定财务报表 HashMap 使用 HAMT 算法, (中文(简体) ), 具体来说 hunt plus 库。 。 。 . Vector 通过一个 被比特映射的矢量 trie 具体来说 列表库页:1. 此外,库以平庸的JavaScript风格写出,并有回环 而不是重复,所以表现应该很好 (单位:千美元)参见此处基准与不可改变的.js 及更多) (中文(简体) ). list 财务报告和审定财务报表 hamt_plus 是前奏的两个唯一依存.

设置、地图和平等

JavaScript除原始类型外没有结构上的平等. 这么说吧 1 === 1 是真的,不过 [1] === [1] 没有, 也不是 {a:1} === {a:1}。 。 。 . 这给收藏带来了问题,因为如果你有 Set你没有 由于平等的定义有限,想要重复要素.

因此,序曲鼓励您定义非原始类型 方法 equals(other: any): boolean 财务报告和审定财务报表 hashCode(): number (中文(简体) ) 方法 不可移动.js 使用) (中文(简体) ). 通过这些方法,结构上的平等是可以实现的,而且事实上 Vector.of(1,2,3).equals(Vector.of(1,2,3)) 实值 true然而,这只能是 工作,如果您在收藏中的值本身有正确定义的平等 (单位:千美元)看前奏可以帮助什么) (中文(简体) ). 如果这些价值观没有结构上的平等,那么我们就不会比 === 行为.

前奏试图协助程序员; 它试图鼓励 开发者做正确的事情。 它会拒绝类型 没有明显的正确 在 Sets 和 Maps 密钥中定义平等, 因此 HashSet.of([1]), (中文(简体) ), 或者说 Vector.of([1]).equals(Vector.of([2])) 将不编译. 对于这两个,你得到(一个更长的版本)这个消息:

Type 'number[]' is not assignable to type 'HasEquals'.
  Property 'equals' is missing in type 'number[]'.

见 用户指南 更多细节.

安装

类型脚本必须知道 Iterable,一个 ES6 特性(但在大多数浏览器中存在) 来编译序曲。 如果您使用 TypeScript 和目标 ES5, 请最小修改您的 tsconfig.json 可添加:

"lib": ["DOM", "ES5", "ScriptHost", "es2015.iterable"]

(与默认的ES5设置相比,它只添加了"es2015. iteable")

用于节点.js

只要在您身上加上依赖 package.json 开始使用( 如 import { Vector } from "prelude-ts";,或 const { Vector } = require("prelude-ts"); 如果你使用普通话的话. 一切都应该奏效,包括如果使用 TypeScript 进行类型检查。 前奏还提供了 在节点REPL中相当的打印.

使用浏览器

在您中添加依赖性 package.json; 类型脚本应自动 注册类型定义.

Npm 包包含文件 dist/src/prelude_ts.js 财务报告和审定财务报表 dist/src/prelude_ts.min.js, (中文(简体) ), 它们是UMD捆绑;它们与其他模块系统一起工作并设定 prelude_ts 如果没有模块系统,则作为窗口全局。 将相关内容包含在您的 脚本标签中的 index.html :

<script src="node_modules/prelude-ts/dist/src/prelude_ts.min.js"></script>

您不应该有问题 导入您的应用程序的序曲, 但如果您使用 模块会变得更加复杂 使用它们的一个解决方案是创建 a 一个 imports.d.ts 包含以下内容的文件 :

// https://github.com/Microsoft/TypeScript/issues/3180#issuecomment-283007750
import * as _P from 'prelude-ts';
export as namespace prelude_ts;
export = _P;

然后在一个 .ts 在模块之外,您可以做到:

import Vector = prelude_ts.Vector;

- 获取没有命名空间的值.

最后,如果您也包括 dist/src/chrome_dev_tools_formatters.js 结束 (单位:千美元) script 标签,以及 启用自定义格式化, (中文(简体) ), 这样你就可以得到 在 Chrome 调试器中很好的显示序曲值。 。 。 .

愿望清单/即将具备的特点

  • CharSeq,一个字符串包装?
  • 非空向量吗 ? (已经 非空链接列表(中文(简体) )
  • 使用蹦床或类似技术 Stream 避免堆栈溢出非常大溪流上的例外
  • 现有类别上更多的功能

超出序曲范围

  • 免费的僧侣
  • 蒙德变压器
  • 效果跟踪
  • 高级类型模拟

我认为这些概念在语言上无法用足够好的方式表达 例如 TypeScript.

替代品和影响

  • 货币.js - 只有一个 List 财务报告和审定财务报表 Option 收藏,以功能式ES5执行. 执行情况, 使用再现,表示其列表类型明显比序曲的慢.
  • 不可改变.js - 没有 Option 概念; 类型可以是 clunky.
  • 庇护 提供全球功能,例如 S.filter(S.where(...)) 而序曲则倾向于 流利的 API 风格 list.filter(..).sortBy(...)而且,避难所不会 提供套装和地图。 另一方面,避难所有一些JS运行时间类型系统 支持,前奏没有.
  • 拉达克 提供全球功能,例如 R.filter(R.where(...)) 而序曲则倾向于 流利的 API 风格 list.filter(..).sortBy(...)而且,拉姆达不提供 集和地图。 拉姆达也用咖哩从盒子里取出很多东西 可能不会 对一些开发者来说是直观的。 在序曲中, 咖喱声 打开 部分适用 选择进入.
  • 摇篮 也具有全球功能和许多功能 变异所集.
  • 虚拟 - 这是一个爪哇文库,但它是序曲的主要灵感. 请注意Vavr是受斯卡拉图书馆的启发,所以序曲也是, 过渡性.

类型脚本版本

截至0.8.2,前奏需要TypeScript 3.1或更新.

图标

npm install

npm test

npm run-script docgen

npm run benchmarks

版本与发布记录

@3fv/prelude-ts 共发布 27 个版本,首次发布于 2019/12/14;过去 12 个月发布了 2 个版本。

版本发布日期距今
0.8.42latest2026/05/265 个月前
0.8.412026/05/265 个月前
0.8.372025/01/221.8 年前
0.8.362025/01/221.8 年前
0.8.352024/12/261.9 年前
0.8.342024/11/172 年前

关于 @3fv/prelude-ts 的常见问题

@3fv/prelude-ts 是什么?

一个打字功能编程库

如何安装 @3fv/prelude-ts?

在项目目录运行 npm install @3fv/prelude-ts,或使用 pnpm add / yarn add / bun add。

@3fv/prelude-ts 支持 TypeScript 吗?

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

@3fv/prelude-ts 支持 ESM 还是 CommonJS?

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

@3fv/prelude-ts 可以商用吗?

@3fv/prelude-ts 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@3fv/prelude-ts 的下载量有多少?

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

@3fv/prelude-ts 还在维护吗?

最新版本 0.8.42 发布于 2026/05/26(5 个月前);至今共发布 27 个版本,其中过去 12 个月发布了 2 个;首次发布于 2019/12/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。