# jsdoc-type-pratt-parser 中文文档

规范地址：https://npmcn.com/package/jsdoc-type-pratt-parser/

版本：9\.5\.0
npm 元数据更新时间：2026-11-03T22:37:12.268Z
中文译文更新时间：2026-11-03T23:34:34.548Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/jsdoc-type-pratt-parser
原文对照：https://npmcn.com/package/jsdoc-type-pratt-parser/?lang=original
项目主页：https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser
源码仓库：https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser

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

- 包体积（解压后）：143 kB，5 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：^22\.22\.2 \|\| \>=24\.15\.0
- 运行依赖：1 个
- 首次发布：2021-02-20T13:30:26.172Z
- 最新版本发布：2026-11-03T22:37:11.896Z
- 已发布版本数：113（近 12 个月 19 个）

## 中文简介

[![Npm Package](https://badgen.net/npm/v/jsdoc-type-pratt-parser)](https://www.npmjs.com/package/jsdoc-type-pratt-parser) ［![Test Status](https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/actions/workflows/test.yml/badge.svg?branch=main)］

## 安装

```sh
npm install jsdoc-type-pratt-parser
```

也可以使用：`pnpm add jsdoc-type-pratt-parser`、`yarn add jsdoc-type-pratt-parser`、`bun add jsdoc-type-pratt-parser`

## README

[![Npm Package](https://badgen.net/npm/v/jsdoc-type-pratt-parser)](https://www.npmjs.com/package/jsdoc-type-pratt-parser) [![Test Status](https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/actions?query=branch%3Amain) [![Coverage Status](https://coveralls.io/repos/github/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/badge.svg?branch=main)](https://coveralls.io/github/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser?branch=main) [![Code Style](https://badgen.net/badge/code%20style/ts-standard/blue?icon=typescript)](https://github.com/standard/ts-standard) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)

# Jsdoc类型普拉特解析器

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

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

-   [https://en.wikipedia.org/wiki/Operator-precedence\_parser#Pratt\_parsing](https://en.wikipedia.org/wiki/Operator-precedence_parser#Pratt_parsing)
-   [http://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-expression-parsing-made-easy/](http://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-expression-parsing-made-easy/)
-   [https://matklad.github.io/2020/04/13/simple-but-powerful-pratt-parsing.html](https://matklad.github.io/2020/04/13/simple-but-powerful-pratt-parsing.html)

## 目录表

-   [现场演示](https://npmcn.com/package/jsdoc-type-pratt-parser/#readme-live-demo)
-   [开始](https://npmcn.com/package/jsdoc-type-pratt-parser/#readme-getting-started)
-   [API文档](https://npmcn.com/package/jsdoc-type-pratt-parser/#readme-api-documentation)
-   [可用语法](https://npmcn.com/package/jsdoc-type-pratt-parser/#readme-available-grammars)
-   [转换](https://npmcn.com/package/jsdoc-type-pratt-parser/#readme-transforms)
-   [遍历](https://npmcn.com/package/jsdoc-type-pratt-parser/#readme-traverse)
-   [自定义解析器和stringifier](https://npmcn.com/package/jsdoc-type-pratt-parser/#readme-custom-parsers-and-stringifiers)
-   [测试状态](https://npmcn.com/package/jsdoc-type-pratt-parser/#readme-tests-status)
-   [表演](https://npmcn.com/package/jsdoc-type-pratt-parser/#readme-performance)
-   [发展](https://npmcn.com/package/jsdoc-type-pratt-parser/#readme-development)

## 现场演示

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

## 开始

```
npm install jsdoc-type-pratt-parser
```

```js
import { parse } from 'jsdoc-type-pratt-parser'

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

## API文档

可以找到API文档 [在这里](https://jsdoc-type-pratt-parser.github.io/jsdoc-type-pratt-parser/docs/)。 它是不完整的，但却是一个很好的起点。请创建问题或pr，如果你没有找到你所期望的。

## 可用语法

支持三种不同的模式（语法）： `'jsdoc'`， `'closure'` 和 `'typescript'`

## 转换

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

[`stringify`](https://jsdoc-type-pratt-parser.github.io/jsdoc-type-pratt-parser/docs/index.html#stringify)：

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

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

可以使用自定义字符串化 [`stringifyRules`](https://jsdoc-type-pratt-parser.github.io/jsdoc-type-pratt-parser/docs/index.html#stringifyRules) 和 [`transform`](https://jsdoc-type-pratt-parser.github.io/jsdoc-type-pratt-parser/docs/index.html#transform)：

```js
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>`](https://jsdoc-type-pratt-parser.github.io/jsdoc-type-pratt-parser/docs/index.html#TransformRules) 界面还是你 可以建立在 [身份规则集](https://jsdoc-type-pratt-parser.github.io/jsdoc-type-pratt-parser/docs/index.html#identityTransformRules) 是这样的:

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

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

const val = transform(myRules, result)
```

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

[洗涤比较模式](https://jsdoc-type-pratt-parser.github.io/jsdoc-type-pratt-parser/docs/index.html#catharsisTransform)：

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

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

[Jsdoctypeparser比较模式](https://jsdoc-type-pratt-parser.github.io/jsdoc-type-pratt-parser/docs/index.html#jtpTransform)：

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

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

## 遍历

方法遍历AST [`traverse`](https://jsdoc-type-pratt-parser.github.io/jsdoc-type-pratt-parser/docs/index.html#traverse) 功能:

```js
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）：

```js
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`）. 你可以提供这些 通过提供以下可选参数：

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

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

const stringified = stringify(
  result,
  generate
)
```

## 测试状态

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

## 表演

一个简单的 [性能比较](https://npmcn.com/package/jsdoc-type-pratt-parser/benchmark/benchmark.js) 使用 [Benchmark.js](https://benchmarkjs.com/) 产生了以下结果：

```
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
```

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

## 发展

如果您想贡献，请参阅 [开发指南](https://npmcn.com/package/jsdoc-type-pratt-parser/DEVELOPMENT.md) 得到一些建议。你可以随意制造问题 信息丢失了。

## 常见问题

### 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 和提交记录判断。

