如何使用 JSDoc 记录符号索引签名以符合打字稿?

Posted

技术标签:

【中文标题】如何使用 JSDoc 记录符号索引签名以符合打字稿?【英文标题】:How to document symbol index signature using JSDoc to be typescript compliant? 【发布时间】:2018-11-27 07:48:59 【问题描述】:

我使用纯 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):

在 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(打字稿)错误:

【问题讨论】:

【参考方案1】:

您将secret 签名为Map&lt;string, number&gt;;,因此secret MUST 的第一个参数为string,第二个参数为number

正确的例子是

map.set('2',1)

【讨论】:

我在 tsconfig 文件中启用了 Javascript 检查。另外我的问题是关于 TypeScript 没有将 map.set(1, '2'); 识别为错误而不是关于 typescript 不起作用。

以上是关于如何使用 JSDoc 记录符号索引签名以符合打字稿?的主要内容,如果未能解决你的问题,请参考以下文章

如何在评论/JSDoc 中引用另一种打字稿类型?

打字稿:类型“”没有索引签名

打字稿:映射类型中的索引签名

打字稿中迭代的索引签名

typescript 打字稿索引签名示例

实现类中的打字稿索引签名和方法不起作用