javascript - 如何使用 JSDoc 记录符号索引签名以符合 typescript ?

标签 javascript typescript visual-studio-code jsdoc

我使用纯 Javascript 创建类并使用 JSDoc 记录它,我使用 typescript 进行类型检查。

但我不知道如何正确编写 JSDoc,以便它可以识别使用符号的字段访问。

const secret = Symbol('secret');
class MyClass {
  constructor() {
    /** @type {Map<string,number>} */
    this[secret] = new Map();
  }
  method() {
    const map = this[secret];
    // Should give an error in the following line since 1 is not a string
    map.set(1, '2');
  }
}

我从 VSCode 得到的结果如下(如您所见, map 的类型为 any): VSCode result

在 TypeScript 中很容易让它工作,只需像任何其他类属性一样声明它。

const secret = Symbol('secret');
class MyClass {
  [secret]: Map<string, number>; // Declared here
  constructor() {
    this[secret] = new Map();
  }
  method() {
    const map = this[secret];
    map.set(1, '2');
  }
}

我得到的 VSCode( typescript )错误: VSCode error

最佳答案

你已经 secret签名为 Map<string, number>;所以secret MUST第一个参数为 string第二个参数为 number .

正确的例子是

map.set('2',1)

关于javascript - 如何使用 JSDoc 记录符号索引签名以符合 typescript ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50909908/

相关文章:

javascript - Ext JS 6 中与预加载关系一对一

java - 如何编写可在 Java 和 C++ 中解析的脚本

laravel - 我如何在 windows 的 Visual Studio 代码编辑器中转到 Laravel 类的定义?

javascript - 在 Visual Studio Code 中使用react智能感知

Angular Injectable 装饰器 - 预期 0 个参数但得到 1 个

visual-studio-code - VSCode 的 format-on-save 设置与 prettier 冲突

javascript - 用于导航的悬停和 onClick 效果上的图像

JavaScript - 整数的负字节

angular - MatCheckbox preventDefault() 和 event.checked 值

javascript - 为长度为 '[]' 的元组类型 '0' 构建 Angular 项目时出错,索引 '0' 处没有元素