jsdoc 相关问题

JSDoc是一种用于向JavaScript源代码添加内联API文档的语法。这与解析和操作遵循JSDoc语法的代码的各种工具不同。

如何用JSDoc输入自定义商店的订阅方法

给出一个简单的自定义商店工厂功能 /** * @template T 在存储中处理的通用数据 * @typedef {import('svelte/store').Readable} 可读 */ /** * @typedef {Object} MyCusto...

回答 1 投票 0

对 createAsyncThunk 生成的动作创建者和参数的打字支持

我正在关注 Redux Essentials 教程,了解如何使用 createAsyncThunk 来生成 Thunk。在他们的示例中,他们创建了一个像这样的 thunk: 导出常量 addNewPost =

回答 3 投票 0

如何在 TypeScript 对象上使用 typedef?

我用 JavaScript (.js) 编写了以下代码: /** * @typedef {Object} 账户类型 * @property Regular - 用户有用户名和密码 * @property HotspotMAC - 用户的用户名位于...

回答 1 投票 0

如何对类型化对象函数参数的字段执行 Typescript JSDoc?

下面是一个 Typescript 函数签名 x,它接受 ABC 作为可选参数。如果传入ABC,则a和b为必填字段。 异步 x(选项:ABC = {}):Promise 接口...

回答 2 投票 0

为什么当我添加 onchange 时 Typescript 错误会消失?

在 VSCode 中,如果启用了适当的设置,则以下 .html 文件将显示错误: ... 在 VSCode 中,如果启用了适当的设置,则以下 .html 文件将向您显示错误: <!DOCTYPE html> <html> <body> <div> <select> </select> </div> <script> // @ts-check /** * @type {string} */ const data = 0; </script> </body> </html> 但是,如果您只是添加一个空的onchange: <select onchange=""> 然后诊断消失!您仍然可以将鼠标悬停在变量上,它会显示它们的正确类型,但不会进行诊断。这是为什么? 我想这就是 VS Code 的工作原理。正如评论中所发现的,在撰写本文时,如果您希望进行 JavaScript 验证,除了将 VS Code 设置为 html.validate.scripts 之外,HTML 文档中任意位置的第一个 JavaScript 代码还需要以 true 指令注释开始。 这支持了一个假设,即 VS Code 所做的事情(可能有更多细微差别,但是)几乎连接了 HTML 文档中的所有 JS 代码,然后将其发送到其 JS 验证位。我尝试深入 VS Code 源代码来验证这一点,我可以看到它。您可以通过以下代码进行追踪: https://github.com/microsoft/vscode/blob/9621add46007f7a1ab37d1fce9bcdcecca62aeb0/extensions/html-language-features/server/src/htmlServer.ts#L276 @ts-check https://github.com/microsoft/vscode/blob/9621add46007f7a1ab37d1fce9bcdcecca62aeb0/extensions/html-language-features/server/src/modes/javascriptMode.ts#L101(特别是在这里): if (textDocument.languageId === 'html') { const modes = languageModes.getAllModesInDocument(textDocument); const settings = await getDocumentSettings(textDocument, () => modes.some(m => !!m.doValidation)); const latestTextDocument = documents.get(textDocument.uri); if (latestTextDocument && latestTextDocument.version === version) { // check no new version has come in after in after the async op for (const mode of modes) { if (mode.doValidation && isValidationEnabled(mode.getId(), settings)) { pushAll(diagnostics, await mode.doValidation(latestTextDocument, settings)); } } return diagnostics; } } 特别是因为这个问题帖子的动机是添加脚本值属性,我发现这里特别有趣的是,如果你查看export function getJavaScriptMode(documentRegions: LanguageModelCache<HTMLDocumentRegions>, languageId: 'javascript' | 'typescript', workspace: Workspace): LanguageMode { const jsDocuments = getLanguageModelCache<TextDocument>(10, 60, document => documentRegions.get(document).getEmbeddedDocument(languageId)); const host = getLanguageServiceHost(languageId === 'javascript' ? ts.ScriptKind.JS : ts.ScriptKind.TS); const globalSettings: Settings = {}; function updateHostSettings(settings: Settings) { const hostSettings = host.getCompilationSettings(); hostSettings.experimentalDecorators = settings?.['js/ts']?.implicitProjectConfig?.experimentalDecorators; hostSettings.strictNullChecks = settings?.['js/ts']?.implicitProjectConfig.strictNullChecks; } return { getId() { return languageId; }, async doValidation(document: TextDocument, settings = workspace.settings): Promise<Diagnostic[]> { updateHostSettings(settings); const jsDocument = jsDocuments.get(document); const languageService = await host.getLanguageService(jsDocument); const syntaxDiagnostics: ts.Diagnostic[] = languageService.getSyntacticDiagnostics(jsDocument.uri); const semanticDiagnostics = languageService.getSemanticDiagnostics(jsDocument.uri); return syntaxDiagnostics.concat(semanticDiagnostics).filter(d => !ignoredErrors.includes(d.code)).map((diag: ts.Diagnostic): Diagnostic => { return { range: convertRange(jsDocument, diag), severity: DiagnosticSeverity.Error, source: languageId, message: ts.flattenDiagnosticMessageText(diag.messageText, '\n') }; }); }, 的定义,它实际上有一个可选的getEmbeddedDocument参数,它是上面的调用中没有使用它。 Anyhoo,如果您想使用脚本值属性并确保进行 JS 检查,只需尝试将 ignoreAttributeValues 元素尽可能早/尽可能高地放在 HTML 文件中,并在其中添加 script 指令注释。前任。 @ts-check 靠近 HTML 文档内部 <script>//@ts-check</script> 元素的顶部。

回答 0 投票 0

使用jsdoc定义递归对象形状的标准方法?

我正在使用jsdoc来记录函数参数。一个函数是递归的,并接受一组可以嵌套到任意深度的对象。这是一个简化的示例: 常量人= {

回答 1 投票 0

如何使用 JSDoc + TypeScript 输入 JavaScript 函数?

更新(2023) 我实际上做了一个关于如何获得 tsc + JSDoc 的演讲来回答这个问题以及其他一些问题: https://jswithtypes.com 并创建了一个包来帮助使用 tsconfig 样板: http...

回答 1 投票 0

在storybook中为纯JS类编写文档

我刚刚开始使用 Storybook 作为我正在开发的 UI 组件库。我想将为 JS 类方法和属性编写的 JSDoc 提取到 Storybook 中并创建一个 Doc。 故事书确实支持...

回答 2 投票 0

如何导出将发布到 npm 的 JavaScript 库的 JSDoc 类型

我在网上搜索了这个问题,甚至查看了 GitHub 上的 TypeScript 问题(5k+ 问题),但似乎找到了解决方法;例子; // 我的模块/tsconfig.json { “编译器选项”:{ ...

回答 1 投票 0

jsdoc 有效参数类型

是否有 jsdoc 参数标签的有效类型列表?例如, @param {type} myParam 一些参数说明 我知道数字和字符串之类的东西是有效的,但是如果我......

回答 3 投票 0

当我在项目中使用带有“命名空间”和“模块”的 JSDoc 时,列出的类和命名空间文档从模块 html 页面中消失了

我正在使用 JSDoc 和 Docstrap 记录一个项目。 当文档组织为(2)个JS文件(或模块)时,生成的文档就可以了。每个模块列出两个(类)。 接下来,我包括...

回答 1 投票 0

JSDoc中有正则表达式的类型吗

我有一个正则表达式存储在这样的变量中: const 正则表达式 = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{1,}$/ 我现在想使用 JSDoc 提供一个类型。 VSCode 智能感知建议: @ty...

回答 1 投票 0

配置ESLint括号中可选参数

如何配置 ESLint,使其检查必需参数是否写在 JSDoc 中且不带括号,可选参数是否写在括号中? 例子 /** * 函数参数 * *@

回答 1 投票 0

如何使用 JSDoc 导出全局类型?

我发现自己必须在多个文件中重复此过程。 /** @type {import('vue').Ref} */ 函数乐趣(var){ /... } 有没有办法导入一次类型并在不同的地方使用它......

回答 1 投票 0

我怎样才能拥有类似于@deprecated注释的东西?

我有一个 TypeScript Next.js 应用程序,我在编码时使用 VSC。 我喜欢这个功能:如果我在函数上方添加 @deprecated 的 JSDoc 注释,那么该函数的所有用法都具有该函数...

回答 1 投票 0

为什么 VS Code 中 TypeScript 对象属性的建议描述和悬停信息不显示属性类型的文档注释?

最容易在下图中看到该问题,因为该问题与 VSCode 中显示类型信息和注释的弹出框有关。 这是代码,但是 TS Playground 甚至没有显示

回答 1 投票 0

[jsdoc]:@type{Object} 不提示属性

常量测试 = {}; 测试.test1 = {}; 测试.test2 = []; 精细工作 /** * @类型{对象} */ 常量测试 = {}; 测试.test1 = {}; 测试.test2 = []; 工作不好 在我声明测试变量的类型为

回答 1 投票 0

为什么我的 JSDoc 类型定义与 VS Code 中的 null 联合的悬停不显示 null 作为联合的一部分?

我有以下 LinkedList 类定义,使用 JSDoc 和 jsconfig.json 在 VSCode 中进行类型检查。在其中,它应该将 value 和 next 的类型显示为未定义的联合类型,但是......

回答 2 投票 0

为什么我的 JSDoc 类型定义与 VS Code 中的 null 联合的悬停不显示 null 作为联合的一部分?

我有以下 LinkedList 类定义,使用 JSDoc 和 jsconfig.json 在 VSCode 中进行类型检查。在其中,它应该将 value 和 next 的类型显示为未定义的联合类型,但是......

回答 2 投票 0

如何使用 JSDoc 将 Chart.js 类型信息获取到我的纯 javascript 文件中?

我有一个相当旧的应用程序,这是我所拥有的最小可重现的变体: 运行 npm i Chart.js Chartjs-adapter-moment 时刻 像这样创建一个index.html: 我有一个相当旧的应用程序,这是我所拥有的最小可重现的变体: 奔跑npm i chart.js chartjs-adapter-moment moment 创建一个index.html,如下所示: <html> <script src="node_modules/moment/moment.js"></script> <script src="node_modules/chart.js/dist/chart.umd.js"></script> <script src="node_modules/chartjs-adapter-moment/dist/chartjs-adapter-moment.js"></script> <script src="app.js"></script> <div style="height: 200px; width: 300px;"><canvas id="my-chart"></canvas></div> </html> 创建一个app.js文件,如下所示: // @ts-check /** * @typedef moment * @property {import('moment')} moment */ /** * @global {import('chart.js')} Chart */ document.addEventListener("DOMContentLoaded", () => { const ctx = document.getElementById("my-chart"); const chartRef = new Chart(ctx, { type: "line", options: { scales: { x: { type: "time" }, y: { min: 0, max: 10 }, }, }, data: { datasets: [ { label: 'Stuff', data: [ { x: moment("2023-01-01"), y: 2 }, { x: moment("2023-02-01"), y: 8 }, { x: moment("2023-03-01"), y: 3 }, { x: moment("2023-04-01"), y: 6 }, ], }, ], }, }); }); moment 类型似乎在 VSCode 中运行良好。但 Chart 打字根本不起作用。以下是它目前在 VSCode 中的作用: 我尝试了很多不同的东西,而不是@global声明,似乎没有任何效果。 当我不使用任何 Chart 或 import 或类似工具时,如何正确获取 Chart.js require 和 VSCode 中相关类型的类型完成? 尝试将您的 @global 更改为 /** @typedef {import("chart.js")} */。 另请参阅 https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html 以获取支持的 JSDoc 事物列表。我在那里没有看到@global。 VS Code 的内置 JS 支持是基于 TypeScript 的 tsserver 构建的。

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.