You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在jsDoc中避免生成类默认构造函数的文档?

解决方案

针对你遇到的JSDoc生成全静态类文档的问题,有几个可行的处理方式:

1. 使用@hideconstructor + @classdesc标签

这是最直接的方案,既隐藏构造函数的文档,又保留类和静态方法的文档:

/**
 * 封装静态工具方法的类,不可实例化
 * @classdesc 仅提供静态工具方法,禁止创建实例
 * @hideconstructor
 */
class Foo {
  /**
   * 该方法不执行任何操作
   */
  static doNothing() {
  }
}

@hideconstructor会让JSDoc不生成构造函数的文档,@classdesc可以明确说明类的定位,避免用户误解为可实例化。

2. 改用命名空间形式

如果不想用类的语法,直接用对象字面量定义命名空间,更符合全静态方法的使用场景:

/**
 * 工具方法集合
 * @namespace Foo
 */
const Foo = {
  /**
   * 该方法不执行任何操作
   */
  doNothing() {
  }
};

JSDoc对命名空间的文档生成逻辑更贴合这类场景,不会出现构造函数的歧义。

3. 构造函数抛出错误(同时保留文档)

如果必须保留类的结构,可在构造函数中抛出错误,明确禁止实例化,同时用JSDoc标注说明:

/**
 * 仅包含静态方法的工具类
 * @classdesc 不可实例化,仅通过静态方法调用
 */
class Foo {
  /**
   * 禁止实例化该类
   * @throws {Error} 尝试实例化时会抛出错误
   */
  constructor() {
    throw new Error('Foo 是静态工具类,不能创建实例');
  }

  /**
   * 该方法不执行任何操作
   */
  static doNothing() {
  }
}

这种方式不仅能通过JSDoc明确告知用户不可实例化,还能在代码层面阻止实例化操作。

另外你提到的重构思路是合理的:在JavaScript中,全静态方法的类本质上更接近模块或命名空间。如果项目允许,直接通过ES模块导出独立的工具方法(比如export function doNothing() {}),会更符合JS的语言设计,也能彻底避免类带来的实例化歧义。

内容的提问来源于stack exchange,提问作者user15883430

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:12:51