假设我有一个 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
将使用 注释的任何方法、字段或属性标记为私有@private
JSDoc 标签?
根据 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(使用前将#替换为@)