JSDocTypeLiteral.jsdocPropertyTags returns only the first tag

未关闭
#64,899 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

@icecold009 已经在做这个了。

开始于 2026年10月21日。

  • #64913 来自 @icecold009 —— 未关闭

评估

难度
4/5
预计耗时
3-5 天
新手友好度
35/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
停滞
技术栈
typescript
领域
api, tooling

调研方向

Start with the JSDocPropertyTags definition in tools/scripts/tsc/ast.json and the getter generation in tools/scripts/tsc/generate-encoder.ts; the issue links a related report, #64864. Trace how raw child arrays are encoded and how generated getters handle list properties. Done when jsdocPropertyTags exposes all three tags as a node list while child traversal remains correct; an open pull request is already linked.

由索引模型根据 Issue 内容生成。

描述

Bug
🔎 Search Terms

jsdocPropertyTags, JSDocTypeLiteral, JSDocPropertyTag, typedef property, native API, sync API, NodeList

🕗 Version & Regression Information

This is the behavior in every v7 version I tried: 7.0.2 (typescript/unstable/*), 7.1.0-beta, and 7.1.0-dev.20261021.1. In 6.0, jsDocPropertyTags holds all the tags.

⏯ Playground Link

No response

💻 Code
import {API} from 'typescript/sync';
import {createFileSystem} from 'typescript/fs';

const api = new API({cwd: '/'});
const snapshot = api.createSnapshot({
    openProjects: ['/tsconfig.json'],
    fileSystem: createFileSystem([
        ['/tsconfig.json', JSON.stringify({files: ['/input.js'], compilerOptions: {allowJs: true, noLib: true}})],
        ['/input.js', `/**
 * @typedef {Object} Events
 * @property {string} a
 * @property {string} b
 * @property {string} c
 */
export const x = 1;`],
    ]),
});
const sourceFile = snapshot.getProjects()[0].program.getSourceFile('/input.js');
const literal = sourceFile.statements[0].jsDoc[0].tags[0].typeExpression;

console.log(literal.jsdocPropertyTags.length, literal.jsdocPropertyTags.name?.text);

const walked = [];
literal.forEachChild(node => { walked.push(node.name.text); });
console.log(walked);

api.close();
🙁 Actual behavior
undefined a
[ 'a', 'b', 'c' ]

jsdocPropertyTags is the first JSDocPropertyTag node, not a list. forEachChild still visits all three tags.

🙂 Expected behavior

jsdocPropertyTags is a node list containing all three tags, as jsDocPropertyTags is in 6.0.

Additional information about the issue

JSDocPropertyTags is a raw []*Node in tools/scripts/tsc/ast.json ("list": "raw"), so the encoder writes the tags as direct children of the node, with no NodeList entry. generateTSNodeGenerated in tools/scripts/tsc/generate-encoder.ts only treats nodeList and modifierList as lists, so this property gets a single-node getter that returns child 0.

Possibly related: #64864.

主要语言
Go
星标
112k
派生
15.4k
平均合并
3 天 1 小时
30 天内合并 PR
136

环境准备

在 Codespaces 中打开

在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

microsoft/TypeScript 的其他 Issue

查看 microsoft/TypeScript 的全部 Issue

相似的 Issue

更多 Go Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。