如何使用 JSDoc Typescript 声明隐藏“私有”方法?

2024-03-18

假设我有一个 JavaScript 类

/**
 * @element my-element
 */
export class MyElement extends HTMLElement {
  publicMethod() {}
  /** @private */
  privateMethod() {}
}

customElements.define('my-element', MyElement);

和一个声明文件,使用生成declaration and allowJs:

export class MyElement extends HTMLElement {
  publicMethod(): void;
  /** @private */
  privateMethod(): void
}

我还在构建后脚本中将其连接到声明文件:

declare global { interface HTMLElementTagNameMap { 'my-element': MyElement; } }

在打字稿文件中使用此元素时,我可以访问privateMethod在自动完成中。

import 'my-element'
const me = document.createElement("my-element")
me.// autocompletes `privateMethod`

我该如何指导tsc将使用 注释的任何方法、字段或属性标记为私有@privateJSDoc 标签?


根据 JSDoc 文档,使用/** @private */是正确的语法,但这不是 TypeScript 处理它的方式。您需要利用 TypeScripts 语法来处理此问题,它不能单独与 JSDoc 一起使用。

TypeScript 3.8 及更高版本支持 ES6 风格的私有字段 https://www.typescriptlang.org/docs/handbook/classes.html#ecmascript-private-fields。您可以使用以下方式表示私有字段#方法开头的符号如下:

class Animal {
  #name: string;
  constructor(theName: string) {
    this.#name = theName;
  }
}

// example

new Animal("Cat").#name;
Property '#name' is not accessible outside class 'Animal' because it has a private identifier.

或者,TypeScript 还允许您将字段声明为私有字段 https://www.typescriptlang.org/docs/handbook/classes.html#understanding-typescripts-private使用private标记并将提供所需的结果。这样做不会显示privateMethod在自动完成期间(至少对我来说不是)。

/**
 * @element my-element
 */
class MyElement extends HTMLElement {
  publicMethod() {}
  /** @private */
  private privateMethod() {}
}

let element = new MyElement()

element.privateMethod()
// Error: Property 'privateMethod' is private and only accessible within class 'MyElement'.

以下是使用 VS Code 智能感知的示例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 JSDoc Typescript 声明隐藏“私有”方法? 的相关文章

随机推荐

  • Spring + Oauth2:如何刷新访问令牌

    我正在使用 Spring Boot 构建 REST Web 服务 身份验证是使用 Spring Security 和 OAuth2 实现的 用户根据 LDAP 服务器进行身份验证 这是我的网络安全配置 Configuration Enabl
  • C# 开发最简单的免费设置

    我在上网本上使用 Windows XP SP3 我需要编译 C 程序以供学习 我没有快速的电脑或快速的互联网连接或快钱 有人可以建议让我继续前进的最佳方法吗 谢谢你们 http www microsoft com express Downl
  • 在 Android 3.1 上调整 TextView 大小不会缩小其高度

    我有一个TextView可以动态调整大小 我使用setTextSize 它在 Android 2 2 上正确扩展和收缩其边界 但在Android 3 1上 当文本变小时 区域的高度不会缩小 这证明了这一点 布局只是简单的垂直LinearLa
  • 背景和 CSS 浮动

    所以我使用 960 网格系统 发现了一些他们不支持的东西 我考虑过切换到蓝图 但我必须在此过程中稍后再回到设计 不管怎样 我简化了我的代码来展示我所经历的
  • 对数据库中的项目符号进行排序

    我有一个专栏 datatype varchar 50 在数据库 SQL Server 2008 中 其值如下所示 1 2 1 1 11 4 1 5 2 1 1 1 4 1 2 1 4 2 2 4 3 4 2 4 3 1 4 2 1 11 2
  • HTML 标题对齐问题

    你好 我有 2 个简单的标题 一个 h3 位于一个 h2 之上 由于某些奇怪的原因 h2 标题的左侧似乎有一个 1px 的间隙 这让我发疯 我只是不明白为什么会这样 h2 的字体大小为 40px 而 h3 的字体大小为 12px 有人能帮我
  • 使用 EPPlus 返回 INT 的 Excel 日期列

    所以我使用 EPPlus 来读取和写入 Excel 文档 Workflow 用户生成填充的 Excel 文档 打开文档并添加一行 已上传并已阅读 当我读回值时 使用 EPPlus 创建文档时生成的日期显示正确 但用户更改日期或添加的行显示为
  • 如何在样式文件中定义可绘制对象的大小?

    我想指定一次资源 值 styles xml两个复选框的大小及其四个形状可绘制对象 res drawable cb1 checked xml res drawable cb1 unchecked xml res drawable cb2 ch
  • 是什么原因导致“无可辩驳的模式失败了”,这是什么意思?

    什么是 无可辩驳的模式失败了 意思是 什么情况会导致这个运行时错误 考虑这个例子 foo Just x hello main putStrLn foo Nothing 这使用了一种无可辩驳的模式 部分 无可辩驳的模式总是 匹配 所以这个打印
  • Android TTS 音量控制

    向 TTS 引擎发送请求时 有什么方法可以控制 TTS 引擎的音量吗 我可以在这里使用 AudioManager 吗 谢谢 您可以在 TTS talk 方法中获取此信息 但只能从 API 级别 11 开始 为了保持向后兼容性 您可以定位更高
  • Java 通用列表>

    为什么在java中我们不能这样做 List
  • 使用 PHP 连接到 CMU Sphinx

    我一直在研究语音识别以及将其实施到网站中的方法 我发现了许多将其与 Python 一起使用的示例 甚至还有一个与 Node js 一起使用的示例 但我希望能够将 PHP 与此一起使用 有什么方法可以使用 PHP 访问 Linux 服务器上的
  • 如何在 Google Workspace 插件中国际化 universalActions 标签

    我设置了一个 Gmail 插件universalActions菜单 标签应由以下方式定义Session getActiveUserLocale 以任何方式 由于清单文件中不允许使用变量 appscript json 我不知道该怎么做 我正在
  • 无法在 VS 2017 15.5.7 中添加服务引用

    我有一个 VB NET Core 应用程序 我正在尝试连接到远程 WCF 服务 当我尝试通过 添加连接服务 常规情况下 未列出任何服务 并显示一条消息 当前项目类型不支持任何连接服务 我尝试安装 WCF Web 服务参考提供程序扩展 IIU
  • 如何在android中通过特定应用程序分别查找wifi和网络数据使用情况?

    recived TrafficStats getUidRxBytes uid send TrafficStats getUidTxBytes uid TrafficStats getMobileRxBytes TrafficStats ge
  • Leaflet maxBounds - 边界不起作用

    我尝试了 Leafletjs maxBounds我在 Mapbox 找到的示例代码 https www mapbox com mapbox js example v1 0 0 maxbounds 下面你可以找到我的完整代码 也在jsfidd
  • 有什么理由使用运行时断言而不是编译时断言?

    在审查 Visual C 代码库时 我发现了以下奇怪的事情 运行时断言 即检查条件 如果违反条件则抛出异常 用于可以在编译时评估条件的情况 assert sizeof SomeType sizeof SomeOtherType 显然 编译器
  • 错误 [ExceptionHandler] 无法读取 NestJs 中未定义的属性“__guards__”

    我正在努力在 Nest 项目中实现简单的身份验证 当我添加 UseGuards AuthGuard local 我的控制器出现以下错误 ERROR ExceptionHandler Cannot read property guards o
  • 模拟空格键按键

    我到处搜索 阅读MDN上的文档 但我似乎无法解决这个问题 I want to emulate the client pressing the space bar using JavaScript 我试过了 var e new Keyboar
  • 如何使用 JSDoc Typescript 声明隐藏“私有”方法?

    假设我有一个 JavaScript 类 element my element export class MyElement extends HTMLElement publicMethod private privateMethod cus