JSDocTypeLiteral.jsdocPropertyTags returns only the first tag

オープン
#64,899 コメント 0 件 リアクション 0 件 担当者 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日 6時間
マージ済み PR(30日)
136

環境構築

Codespaces で開く

このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

microsoft/TypeScript のほかの issue

microsoft/TypeScript の issue をすべて見る

似ている issue

Go の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。