JSDoc: a nested @property with a type that does not parse drops every nested @property after it

未關閉
#65,020 1 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

維護者通常 1 天內回覆

@NullVoxPopuli 已經在處理了。

開始於 2026年10月29日。

  • #65022 來自 @NullVoxPopuli —— 未關閉
  • #65029 來自 @timurzvural —— 已關閉,未合併

評估

難度
4/5
預估耗時
3-5 天
新手友好度
48/100
Issue 類型
缺陷
描述清晰度
描述清楚
活躍度
活躍
技術堆疊
javascript, typescript

研究方向

Start by tracing how the JSDoc parser handles nested @property tags in the supplied index.js example, then compare its recovery with the flat-property case described in the issue. Use the supplied tsconfig.json and check.ts repro to confirm that only Args.onSave is omitted while Args.onCancel remains in keyof Sig['Args'].

由索引模型根據 Issue 內容生成。

描述

[!NOTE]
Investigated with Claude (via Claude Code); corrections welcome.

🔎 Search Terms

jsdoc, typedef, nested property, function(, TS1005

🕗 Version & Regression Information
  • Works: 6.0.3
  • Broken: 7.0.2, 7.1.0-beta, 7.1.0-dev.20261029.1

CHANGES.md says Closure-style function(...) types are no longer supported, so the TS1005 is expected. This issue is about what happens to the other @property tags in the same typedef.

💻 Code

tsconfig.json

{
  "compilerOptions": { "allowJs": true, "checkJs": true, "noEmit": true, "strict": true },
  "include": ["index.js", "check.ts"]
}

index.js

/**
 * @typedef Sig
 * @property {object} Args
 * @property {string} Args.name
 * @property {function(string)=} Args.onSave
 * @property {((v: string) => void)=} Args.onCancel
 */

export {};

check.ts

import type { Sig } from './index.js';

export const a: Array<keyof Sig['Args']> = ['name'];
export const b: Array<keyof Sig['Args']> = ['onSave'];
export const c: Array<keyof Sig['Args']> = ['onCancel'];
🙁 Actual behavior
check.ts(4,45): error TS2322: Type '"onSave"' is not assignable to type '"name"'.
check.ts(5,45): error TS2322: Type '"onCancel"' is not assignable to type '"name"'.
index.js(5,23): error TS1005: '}' expected.

onCancel is also missing, but its type has valid syntax. Every nested property after the one that does not parse is gone.

With flat properties (@property {function(string)=} onSave), only onSave is missing and onCancel is kept. So the problem is in recovery for nested Args.* properties.

🙂 Expected behavior

Only Args.onSave is affected. Args.onCancel is kept, as it is with flat properties.

Additional information about the issue

In real code the only error at the use site is that the property does not exist. For example, a component invocation reports 'onCancel' does not exist in type ..., in a different file from the TS1005. With many typedefs in a codebase, it is hard to connect the two.

主要語言
Go
星號
112k
分支
15.4k
平均合併
2 天 21 小時
30 天內合併 PR
126

環境準備

在 Codespaces 中開啟

在瀏覽器裡用你自己的 GitHub 帳號啟動這個專案的開發容器。

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

microsoft/TypeScript 的其他 Issue

查看 microsoft/TypeScript 的全部 Issue

相似的 Issue

更多 Go Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。