jsdoc-type-pratt-parser

中文文档
9.5.0发布于 2026/11/04MITTypeScriptES Module构建来源已验证

Npm Package [Test Status]

中文使用文档
文档目录11 节
  1. 目录表
  2. 现场演示
  3. 开始
  4. API文档
  5. 可用语法
  6. 转换
  7. 遍历
  8. 自定义解析器和stringifier
  9. 测试状态
  10. 表演
  11. 发展

Npm Package Test Status Coverage Status Code Style semantic-release

Jsdoc类型普拉特解析器

这个项目是jsdoc类型的解析器。它接受jsdoc类型的表达式,例如 Array<string> 然后创建一个抽象的 语法树(AST)。它很大程度上受到了现有图书馆的启发 洗涤 和 jsdoctypeparser,但是…… 不使用 PEG.js相反,它被编写为一个pratt解析器。

您可以在这里找到有关pratt解析器的更多信息:

目录表

现场演示

可以在下面找到一个简单的测试表达式的实时演示: https://jsdoc-type-pratt-parser.github.io/jsdoc-type-pratt-parser/

开始

npm install jsdoc-type-pratt-parser
import { parse } from 'jsdoc-type-pratt-parser'

const result = parse('SomeType<string>', 'typescript')

API文档

可以找到API文档 在这里。 它是不完整的,但却是一个很好的起点。请创建问题或pr,如果你没有找到你所期望的。

可用语法

支持三种不同的模式(语法): 'jsdoc', 'closure' 和 'typescript'

转换

在ast上执行的一个常见任务是转换,例如字符串化。这个库包括一些变换和 实现您自己的实用程序。

stringify:

import { stringify } from 'jsdoc-type-pratt-parser'

const val = stringify({ type: 'JsdocTypeName', value: 'name'}) // -> 'name'

可以使用自定义字符串化 stringifyRules 和 transform:

import { stringifyRules, transform } from 'jsdoc-type-pratt-parser'

const rules = stringifyRules()

// `result` is the current node and `transform` is a function to transform child nodes.
rules.NAME = (result, transform) => 'something else'

const val = transform(rules, { type: 'JsdocTypeName', value: 'name'}) // -> 'something else'

方法来构建自己的转换规则 TransformRules<TransformResultType> 界面还是你 可以建立在 身份规则集 是这样的:

import { identityTransformRules, transform } from 'jsdoc-type-pratt-parser'

const myRules = identityTransformRules()
myRules.NAME = () => ({ type: 'JsdocTypeName', value: 'funky' })

const val = transform(myRules, result)

这个库还支持catharsis和jsdoctypeparser的兼容模式。所提供的转换函数试图 将输出转换为目标库的预期输出。这并不总是与某些类型相同 解析不同。这些模式被认为使转换更容易,但建议使用本机输出作为 这将更统一,将包含更多的信息。

洗涤比较模式:

import { parse, catharsisTransform } from 'jsdoc-type-pratt-parser'

const result = catharsisTransform(parse('myType.<string>', 'closure'))

Jsdoctypeparser比较模式:

import { parse, jtpTransform } from 'jsdoc-type-pratt-parser'

const result = jtpTransform(parse('myType.<string>', 'closure'))

遍历

方法遍历AST traverse 功能:

import { traverse } from 'jsdoc-type-pratt-parser'

// property is the name of the property on parent that contains node
function onEnter(node, parent, property) {
  console.log(node.type)
}

// an onEnter and/or an onLeave function can be supplied
traverse({ type: 'JsdocTypeName', value: 'name'}, onEnter, console.log)

自定义访问者键(按节点) type)可以作为第四个参数提供。他们 优先于内置的 visitorKeys,这对于节点的 这个包不知道的结构(例如,计算属性的ast):

traverse(ast, onEnter, onLeave, {
  // Visit the `expression` property of a custom node type
  MyCustomNode: ['expression'],
  // Nodes of unknown type are visited only if keys are given for them
  Identifier: []
})

自定义解析器和stringifier

对于TypeScript的computed属性和方法,请访问JavaScript (或TypeScript)的解析和字符串化是必需的 中支持的类型 jsdoc-type-pratt-parser). 你可以提供这些 通过提供以下可选参数:

import { parse as espree } from 'espree'
import { generate } from '@es-joy/escodegen'

const parsed = parse(
  input,
  mode,
  { computedPropertyParser: espree }
)

const stringified = stringify(
  result,
  generate
)

测试状态

此解析器运行的大多数测试 洗涤 和 jsdoctypeparser. 它比较了不同解析库的结果。如果你 想要找出输出的不同之处,请查看测试中的注释 // This seems to be an error of ... 或 这个 differ 关键字,表示产生不同的结果。

表演

一个简单的 性能比较 使用 Benchmark.js 产生了以下结果:

Testing expression: Name
catharsis x 37,816 ops/sec ±1.22% (1086 runs sampled)
jsdoc-type-pratt-parser x 602,617 ops/sec ±0.16% (1090 runs sampled)
jsdoctypeparser x 53,256 ops/sec ±0.73% (1081 runs sampled)
The fastest was jsdoc-type-pratt-parser

Testing expression: Array<number>
catharsis x 10,124 ops/sec ±0.56% (1084 runs sampled)
jsdoc-type-pratt-parser x 228,660 ops/sec ±0.40% (1084 runs sampled)
jsdoctypeparser x 42,365 ops/sec ±0.60% (1070 runs sampled)
The fastest was jsdoc-type-pratt-parser

Testing expression: { keyA: Type<A | "string val" >, keyB: function(string, B): A }
catharsis x 1,138 ops/sec ±0.66% (1087 runs sampled)
jsdoc-type-pratt-parser x 46,535 ops/sec ±0.47% (1090 runs sampled)
jsdoctypeparser x 18,291 ops/sec ±0.71% (1084 runs sampled)
The fastest was jsdoc-type-pratt-parser

基准测试使用没有缓存的宣泄。

发展

如果您想贡献,请参阅 开发指南 得到一些建议。你可以随意制造问题 信息丢失了。

版本与发布记录

jsdoc-type-pratt-parser 共发布 113 个版本,首次发布于 2021/02/20;过去 12 个月发布了 19 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
9.5.0latest2026/11/041 天前
9.4.02026/10/2213 天前
9.3.02026/10/2016 天前
9.2.32026/10/1322 天前
9.2.22026/09/171 个月前
9.2.12026/08/302 个月前

其他发布通道:alpha → 1.0.0-alpha.24,dev → 6.2.0-dev.2。

关于 jsdoc-type-pratt-parser 的常见问题

jsdoc-type-pratt-parser 是什么?

[]

如何安装 jsdoc-type-pratt-parser?

在项目目录运行 npm install jsdoc-type-pratt-parser,或使用 pnpm add / yarn add / bun add。

jsdoc-type-pratt-parser 支持 TypeScript 吗?

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

jsdoc-type-pratt-parser 支持 ESM 还是 CommonJS?

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

jsdoc-type-pratt-parser 需要什么版本的 Node.js?

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

jsdoc-type-pratt-parser 可以商用吗?

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

jsdoc-type-pratt-parser 还在维护吗?

最新版本 9.5.0 发布于 2026/11/04(1 天前);至今共发布 113 个版本,其中过去 12 个月发布了 19 个;首次发布于 2021/02/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。